Въпрос относно множество обратни извиквания, възникващи едновременно

Имам нишка, която следи за събития на файловата система на Mac OS X. Ако копирам 100 файла в папка, която се наблюдава, очевидно получавам множество събития на файловата система и следователно множество извиквания за обратно извикване. Чудя се дали тези обаждания за обратно извикване се обработват едно след друго? Или всяко събитие извиква OS нишка, която от своя страна извиква функцията за обратно извикване, в който случай ще имаме множество нишки, всяка от които изпълнява една и съща функция за обратно извикване?


person Paul    schedule 24.09.2010    source източник


Отговори (1)


Зависи кой механизъм използвате, за да гледате събития на файловата система.

Всеки достъп до файл генерира известие вътре в ядрото.

Ако използвате публичните FSEvents API, твърде честите актуализации се обединяват в едно известие. В този случай приемащата страна се управлява от цикъл за изпълнение, т.е. обратното извикване не се извиква в новата фонова нишка или в контекста на нишката на ОС. Изпълнява се в зададения от вас цикъл на събития, обикновено основната нишка, която изпълнява основния цикъл за обработка на събития.

Ако докоснете директно /dev/fsevents (вижте напр. книгата за OS X), получавате всички събития в извикващата нишка едно по едно, с възможно множество събития, върнати от едно извикване.

По същия начин, ако вместо това използвате извлечен от BSD kqueue, ще получите множество събития от извикването на kqueue, ако събитията са чести.

Във всеки случай операционната система не изпълнява вашето обратно извикване в нова/ОС нишка, нито магически дублира вашата нишка, наблюдавайки активността на файловата система, така че да могат да обработват събитията едновременно.

person Yuji    schedule 24.09.2010