Αλεχ
прям как по методичке)
Berkus
Ржачная статейка, очень рекомендую
The device driver’s Interrupt Service Routine (ISR) responds to the interrupt. An interrupt is a CPU-level event, temporarily seizing control of the CPU away from whatever thread was running. You could think of an ISR as “borrowing” the currently-running thread, but I prefer to think of ISRs as executing at such a low level that the concept of “thread” doesn’t exist
БОЛТОЛОГИЯ
Berkus
Ivan
ну, вот я и говорю, что это уже вопрос терминологии
Berkus
очевидно, что весь код в ядре выполняется без тредов, ведь у него нет TCB
Berkus
ну и что теперь
Ivan
так-то понятно, что в ядре IO не блокирует выполнение, если это в принципе возможно
Αλεχ
Ivan
но в любом случае есть некая пердь, которая подписана на прерывание и ждёт результат операции, таймаут, ошибку, etc.
Αλεχ
Αλεχ
а не просто "что-то что процсчитает"
Αλεχ
тут и контекст, и ID, и все остальное
Αλεχ
In computer science, a thread of execution is the smallest sequence of programmed instructions that can be managed independently by a scheduler, which is typically a part of the operating system.
Αλεχ
не вижу тут ничего про шедулер, только прерывание
Berkus
насколько я помню в винде тоже
Αλεχ
Αλεχ
да
Berkus
но это КОНЕЧНО ЖЕ не тред, что вы
Berkus
зашкварно было бы в треде такое делать
Αλεχ
прерывание это не тред
Αλεχ
прерыванием вызывается операция хэндлера, которая да, какой-то тред юзает
Αλεχ
но это не "ожидание"
Αλεχ
короч там написано все
Ivan
в общем, предлагаю сойтись на том, что по ссылке - онанизм на терминологию от сишарп программера под венду
Αλεχ
Αλεχ
в примере выше он делает my_code.wakeup()
Αλεχ
Berkus
но треда при этом нет, ок
Αλεχ
ща нарисую картинку
Αλεχ
пожии
Berkus
я писал ОС немного представляю внутренности
Cat
так слышьте
Cat
на чём сошлись-то?
Cat
асинхронщина быстрее, чем потоки?
Αλεχ
Αλεχ
я про то, что в зеленой части нет потока
Αλεχ
а она 99% времени задачи
Αλεχ
потоки это софтварная концепция
Berkus
ну да, ну да
Berkus
я понел
Αλεχ
я тебе не шарпоопределния даю
Αλεχ
а из CS
Berkus
так вот, в зеленой часть есть как минимум один поток
Berkus
это поток драйвера, который выполняет intr.wait(intr_lock);
Αλεχ
нет
Berkus
то что вы его не видите, ну слепота что поделать
Αλεχ
я же сказал, в случае винды это не так
Berkus
хорошо, давай закончим на том что винда идеальная система где всё делается минуя стадею вычеслений, ок?
Berkus
я всё
Αλεχ
Денис
Marat
Berkus
> The idea that “there must be a thread somewhere processing the asynchronous operation” is not the truth.
это правда, на цпу нет никакой "обработки"
Αλεχ
винда не идеальная система, просто кмк IOCP лучше, чем epoll
Berkus
Berkus
вот я тебе то же самое сказал:
Berkus
хорошо, давай закончим на том что винда идеальная система где всё делается минуя стадею вычеслений, ок?
Αλεχ
Αλεχ
для меня это аналогично противостоянию longpolling vs push
Αλεχ
какой более экономный по ресурсам сам думаю знаешь
Berkus
я не спорю что IOCP хорош, но я категорически против того что там используется 0 потоков
Αλεχ
Αλεχ
как я это вижу
Αλεχ
ты выделяешь какой-то буфер
Αλεχ
и говоришь устройству "скопируй себе"
Αλεχ
после этого ОС вообще ничем не делает, драйвера тоже, всё ложится чисто на микроконтроллер девайса, который копирует это буфер себе
Αλεχ
это так или нет?
Berkus
зависит от 100500 разных микроконтроллеров - например serial будет тебе на каждый байтик слать прерывание и ты уже не скажешь "ос ничего не делает"
Αλεχ
Ivan
"если код на CPU в данный момент не выполняется, значит потока нет"
Ivan
я правильно понял?