Связь с мобильными устройствами

Все, что вы хотели знать о программизме, но боялись спросить.
Аватара пользователя
sobomax
Маньяк
Сообщения: 3699
Зарегистрирован: 29 июн 2006, 22:53
Откуда: Vancouver

Сообщение sobomax »

ajkj3em писал(а):
aissp писал(а):Cm'n данный подход хорош если нагрузка большая. А так нафиг надо, треды легко держат нагрузку исчисляемую десятками...,
вто когда они pthreads и имеют cancellation points, а не как в виндовсах,
когда thread, сидяший в blocking call, можно только из БФГ оcтреливать
Я не спец в виндовсах конешно, но шото я сильно сумлеваюсь что у них нету подобной функциональности.

Кстати в MaxOS X cancellation points до сих пор не имплементированны и нихто сильно не жужжит.

-Maxim
Аватара пользователя
aissp
Маньяк
Сообщения: 2710
Зарегистрирован: 07 ноя 2005, 09:51

Сообщение 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.
Аватара пользователя
sobomax
Маньяк
Сообщения: 3699
Зарегистрирован: 29 июн 2006, 22:53
Откуда: Vancouver

Сообщение sobomax »

sobomax писал(а):Я не спец в виндовсах конешно, но шото я сильно сумлеваюсь что у них нету подобной функциональности.
Таки похоже действительно не было, в висте вот добавили:

http://msdn2.microsoft.com/en-us/library/aa480216.aspx

-Maxim
Аватара пользователя
ajkj3em
Маньяк
Сообщения: 2063
Зарегистрирован: 12 ноя 2006, 06:53

Сообщение ajkj3em »

sobomax писал(а):
sobomax писал(а):Я не спец в виндовсах конешно, но шото я сильно сумлеваюсь что у них нету подобной функциональности.
Таки похоже действительно не было, в висте вот добавили:

http://msdn2.microsoft.com/en-us/library/aa480216.aspx

-Maxim
не понятно можно ли втим API cancel'ить только FILE I/O или любые
blocking calls. например gethostbyname() или IpRenewAddress(). я
подозреваю что нет.
Аватара пользователя
sobomax
Маньяк
Сообщения: 3699
Зарегистрирован: 29 июн 2006, 22:53
Откуда: Vancouver

Сообщение sobomax »

ajkj3em писал(а):например gethostbyname()
gethostbyname() это функция библиотеки, а не системный вызов.

-Maxim
Аватара пользователя
ajkj3em
Маньяк
Сообщения: 2063
Зарегистрирован: 12 ноя 2006, 06:53

Сообщение ajkj3em »

sobomax писал(а):
ajkj3em писал(а):например gethostbyname()
gethostbyname() это функция библиотеки, а не системный вызов.

-Maxim
exactly my point :) то что они добавили в висту - фактически useless,
для приложений которые работают HЕ с raw Win32 API. а таких API
собственно валом и без них в более-менее серьезных приложениях
никуда не деться .. так что хотели как лучше, а получилось как обычно
Аватара пользователя
Marmot
Графоман
Сообщения: 39279
Зарегистрирован: 17 фев 2003, 17:58
Откуда: Caulfeild
Контактная информация:

Сообщение Marmot »

ajkj3em писал(а):exactly my point :) то что они добавили в висту - фактически useless,
для приложений которые работают HЕ с raw Win32 API. а таких API
собственно валом и без них в более-менее серьезных приложениях
никуда не деться .. так что хотели как лучше, а получилось как обычно
А на чем могут блокироваться "HЕ raw Win32 API" ? если не на raw Win32 API?
Аватара пользователя
ajkj3em
Маньяк
Сообщения: 2063
Зарегистрирован: 12 ноя 2006, 06:53

Сообщение 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трел бы для начала
и типа перепалку перечитал бы в контексте, а?
Аватара пользователя
sobomax
Маньяк
Сообщения: 3699
Зарегистрирован: 29 июн 2006, 22:53
Откуда: Vancouver

Сообщение sobomax »

ajkj3em писал(а):
sobomax писал(а):
ajkj3em писал(а):например gethostbyname()
gethostbyname() это функция библиотеки, а не системный вызов.
exactly my point :) то что они добавили в висту - фактически useless,
для приложений которые работают HЕ с raw Win32 API. а таких API
собственно валом и без них в более-менее серьезных приложениях
никуда не деться .. так что хотели как лучше, а получилось как обычно
Не понял? gethostbyname() или его эквивалент в Win32 наверняка внутре использует простые I/O системные вызовы которые уже момно будет закенселить если что.

-Maxim
Аватара пользователя
ajkj3em
Маньяк
Сообщения: 2063
Зарегистрирован: 12 ноя 2006, 06:53

Сообщение ajkj3em »

ну а как за'cancel'ить например shbrowseforfolder, когда он висит
пытаясь cчитать non-existent mounted share ? или IpRenewAddress
все тот же ? собственно, речь о том, что не все пишетcя на голом
Win32 API, так что пользы от вистовых изменений - практически ноль
Аватара пользователя
sobomax
Маньяк
Сообщения: 3699
Зарегистрирован: 29 июн 2006, 22:53
Откуда: Vancouver

Сообщение sobomax »

ajkj3em писал(а):ну а как за'cancel'ить например shbrowseforfolder, когда он висит
пытаясь cчитать non-existent mounted share ? или IpRenewAddress
все тот же ? собственно, речь о том, что не все пишетcя на голом
Win32 API, так что пользы от вистовых изменений - практически ноль
Так если в том-же лилуксе ты какой-нибудь не-POSIX API вызовеш, типа для работы с mount points например, то тоже я очень сомневаюсь что у тебя получится его кансельнуть. Или например file I/O на недоступную NFS шару тоже очень может быть не получится закенселить.

Главное четко понимать что именно ты можеш закенселить а что нет. И тогда можно апликухи правильно писать.

-Maxim
Аватара пользователя
Marmot
Графоман
Сообщения: 39279
Зарегистрирован: 17 фев 2003, 17:58
Откуда: Caulfeild
Контактная информация:

Сообщение Marmot »

ajkj3em писал(а): what kind of question is this ? :) естественно они блокируютcя в ядре,
где же еше. но ты ссылку то sobomax'ную посмoтрел бы для начала
и типа перепалку перечитал бы в контексте, а?
Ну лана, лана, я типа работаю, западло msdn читать :)
Прочитал, понял, даа... :)
Ну хоть что-то можно кансельнуть стало, и то хорошо...
Аватара пользователя
ajkj3em
Маньяк
Сообщения: 2063
Зарегистрирован: 12 ноя 2006, 06:53

Сообщение ajkj3em »

sobomax писал(а): Главное четко понимать что именно ты можеш закенселить а что нет. И тогда можно апликухи правильно писать.
ну да ... дискусиия плавно перешла в констатацию непротиворечивых фактов .. :)
Аватара пользователя
Marmot
Графоман
Сообщения: 39279
Зарегистрирован: 17 фев 2003, 17:58
Откуда: Caulfeild
Контактная информация:

Сообщение Marmot »

ajkj3em писал(а):
sobomax писал(а): Главное четко понимать что именно ты можеш закенселить а что нет. И тогда можно апликухи правильно писать.
ну да ... дискусиия плавно перешла в констатацию непротиворечивых фактов .. :)
Кстати, а как было бы красиво это сделать?
Мне вот всегда хотелось для любого blocking io в thread-е иметь что-то типа SO_TIMEOUT. Типа время прошло, разблокируйся и узнай, что я по этому поводу думаю :)
И с возможностью продолжить ожидание с того же места :)
Аватара пользователя
sobomax
Маньяк
Сообщения: 3699
Зарегистрирован: 29 июн 2006, 22:53
Откуда: Vancouver

Сообщение sobomax »

Marmot писал(а): Мне вот всегда хотелось для любого blocking io в thread-е иметь что-то типа SO_TIMEOUT. Типа время прошло, разблокируйся и узнай, что я по этому поводу думаю :)
И с возможностью продолжить ожидание с того же места :)
Хотеть как известно не вредно, вредно не хотеть. :)

-Maxim
Ответить