Страница 3 из 4
Добавлено: 02 фев 2007, 13:34
sobomax
ajkj3em писал(а):aissp писал(а):Cm'n данный подход хорош если нагрузка большая. А так нафиг надо, треды легко держат нагрузку исчисляемую десятками...,
вто когда они
pthreads и имеют cancellation points, а не как в виндовсах,
когда thread, сидяший в blocking call, можно только из БФГ оcтреливать
Я не спец в виндовсах конешно, но шото я сильно сумлеваюсь что у них нету подобной функциональности.
Кстати в MaxOS X cancellation points до сих пор не имплементированны и нихто сильно не жужжит.
-Maxim
Добавлено: 02 фев 2007, 14:20
aissp
от кусочек болтовни
On system that does not provide blocking calls interruption (i.e. Windows), the deferred cancellation is emulated through a "controlled asyncrhonous cancellation". The thread is interrupted using immediate unkind cancellation: those systems provide a cancellation scheme that is able to kill a thread before it is ever rescheduled, or immediately if the system is a multiprocessor and the killer and the killed thread are running together on two processors. So, this aspect makes possible for the threads to safely state when they are in a condition that makes immediate cancellation possible. So, deferred cancellation is implemented by:
checking if a cancellation request has been issued,
if so, terminate the thread
if not, set a flag that singal that we can be canceled
do system call
reset the flag that signal that we can be canceled.
The killer will atomically check for that flag to be set in the killed thread; if that flag is not set, then the killer issue a kind cancellation request, while if it is set, the target thread is immediately killed.
Note:
The problem with killing another thread in a so unclean manner is that if the system call allocates internally heap memory, that memory is lost. So, even if we provide automatic emulated deferred cancellation points that seem to be safe at the moment, noting can ensure that the same low level functions that are safe now won't use heap memory in the future.
Добавлено: 02 фев 2007, 14:46
sobomax
sobomax писал(а):Я не спец в виндовсах конешно, но шото я сильно сумлеваюсь что у них нету подобной функциональности.
Таки похоже действительно не было, в висте вот добавили:
http://msdn2.microsoft.com/en-us/library/aa480216.aspx
-Maxim
Добавлено: 02 фев 2007, 15:00
ajkj3em
не понятно можно ли втим API cancel'ить только FILE I/O или любые
blocking calls. например gethostbyname() или IpRenewAddress(). я
подозреваю что нет.
Добавлено: 02 фев 2007, 15:02
sobomax
ajkj3em писал(а):например gethostbyname()
gethostbyname() это функция библиотеки, а не системный вызов.
-Maxim
Добавлено: 02 фев 2007, 15:30
ajkj3em
sobomax писал(а):ajkj3em писал(а):например gethostbyname()
gethostbyname() это функция библиотеки, а не системный вызов.
-Maxim
exactly my point :) то что они добавили в висту - фактически useless,
для приложений которые работают HЕ с raw Win32 API. а таких API
собственно валом и без них в более-менее серьезных приложениях
никуда не деться .. так что хотели как лучше, а получилось как обычно
Добавлено: 02 фев 2007, 15:32
Marmot
ajkj3em писал(а):exactly my point

то что они добавили в висту - фактически useless,
для приложений которые работают HЕ с raw Win32 API. а таких API
собственно валом и без них в более-менее серьезных приложениях
никуда не деться .. так что хотели как лучше, а получилось как обычно
А на чем могут блокироваться "HЕ raw Win32 API" ? если не на raw Win32 API?
Добавлено: 02 фев 2007, 15:54
ajkj3em
Marmot писал(а):ajkj3em писал(а):exactly my point :) то что они добавили в висту - фактически useless,
для приложений которые работают HЕ с raw Win32 API. а таких API
собственно валом и без них в более-менее серьезных приложениях
никуда не деться .. так что хотели как лучше, а получилось как обычно
А на чем могут блокироваться "HЕ raw Win32 API" ? если не на raw Win32 API?
what kind of question is this ? :) естественно они блокируютcя в ядре,
где же еше. но ты ссылку то sobomax'ную посмoтрел бы для начала
и типа перепалку перечитал бы в контексте, а?
Добавлено: 02 фев 2007, 15:55
sobomax
ajkj3em писал(а):sobomax писал(а):ajkj3em писал(а):например gethostbyname()
gethostbyname() это функция библиотеки, а не системный вызов.
exactly my point

то что они добавили в висту - фактически useless,
для приложений которые работают HЕ с raw Win32 API. а таких API
собственно валом и без них в более-менее серьезных приложениях
никуда не деться .. так что хотели как лучше, а получилось как обычно
Не понял? gethostbyname() или его эквивалент в Win32 наверняка внутре использует простые I/O системные вызовы которые уже момно будет закенселить если что.
-Maxim
Добавлено: 02 фев 2007, 16:01
ajkj3em
ну а как за'cancel'ить например shbrowseforfolder, когда он висит
пытаясь cчитать non-existent mounted share ? или IpRenewAddress
все тот же ? собственно, речь о том, что не все пишетcя на голом
Win32 API, так что пользы от вистовых изменений - практически ноль
Добавлено: 02 фев 2007, 16:29
sobomax
ajkj3em писал(а):ну а как за'cancel'ить например shbrowseforfolder, когда он висит
пытаясь cчитать non-existent mounted share ? или IpRenewAddress
все тот же ? собственно, речь о том, что не все пишетcя на голом
Win32 API, так что пользы от вистовых изменений - практически ноль
Так если в том-же лилуксе ты какой-нибудь не-POSIX API вызовеш, типа для работы с mount points например, то тоже я очень сомневаюсь что у тебя получится его кансельнуть. Или например file I/O на недоступную NFS шару тоже очень может быть не получится закенселить.
Главное четко понимать что именно ты можеш закенселить а что нет. И тогда можно апликухи правильно писать.
-Maxim
Добавлено: 02 фев 2007, 16:38
Marmot
ajkj3em писал(а):
what kind of question is this ?

естественно они блокируютcя в ядре,
где же еше. но ты ссылку то sobomax'ную посмoтрел бы для начала
и типа перепалку перечитал бы в контексте, а?
Ну лана, лана, я типа работаю, западло msdn читать

Прочитал, понял, даа...

Ну хоть что-то можно кансельнуть стало, и то хорошо...
Добавлено: 02 фев 2007, 20:10
ajkj3em
sobomax писал(а):
Главное четко понимать что именно ты можеш закенселить а что нет. И тогда можно апликухи правильно писать.
ну да ... дискусиия плавно перешла в констатацию непротиворечивых фактов .. :)
Добавлено: 02 фев 2007, 21:06
Marmot
ajkj3em писал(а):sobomax писал(а):
Главное четко понимать что именно ты можеш закенселить а что нет. И тогда можно апликухи правильно писать.
ну да ... дискусиия плавно перешла в констатацию непротиворечивых фактов ..

Кстати, а как было бы красиво это сделать?
Мне вот всегда хотелось для любого blocking io в thread-е иметь что-то типа SO_TIMEOUT. Типа время прошло, разблокируйся и узнай, что я по этому поводу думаю

И с возможностью продолжить ожидание с того же места

Добавлено: 02 фев 2007, 21:48
sobomax
Marmot писал(а):
Мне вот всегда хотелось для любого blocking io в thread-е иметь что-то типа SO_TIMEOUT. Типа время прошло, разблокируйся и узнай, что я по этому поводу думаю

И с возможностью продолжить ожидание с того же места

Хотеть как известно не вредно, вредно не хотеть.
-Maxim