jsem zacacinajici programator na MS-Win. zrovna nedavno jsem overlapped API pouzil. pro sokety se da pouzit funkce WaitForMultipleObjects() pokud pro dany soket vytvorim Event funkci WSACreateEvent() a tuto event se socketem svazu funkci WSAEventSelect()
Názory k článku
Porovnání systémů Linux a FreeBSD (15)
Re: WaitForMultipleObjec ts pro sockety
celé vláknoNemusite pouzivat WSAEventSelect - to je tam jen pro neblokujici sockety misto select. Pro blokujici sokety muzete klidne ReadFile/WriteFile/Ex s nenulovym lpOverlapped nebo WSARecv/WSASend s timtez. (viz msdn.microsoft.com)
Re: WaitForMultipleObjec ts pro sockety
celé vláknoAha --- já jsem zkusil na socketu dělat IO pomocí read a write a to nefungovalo. Pomocí Read/WriteFile(Ex) to skutečně jde (píšou to v dokumentaci).
Ještš k NT
celé vláknoPomocí struktury OVERLAPPED se dá zajistit i rozpoznání víc achynchronních IO od sebe - s každým IO svážeme jednu událost (prvek hEvent) a pak čekáme přes WaitForMultipleObjects.
Asyns + sync IO
celé vláknoJak se udělá když člověk chce čekat na to, až se buď objeví znak na stdin, nebo se dokončí nějaký asynchronní read nebo write do souboru?
Re: Asyns + sync IO
celé vláknoPokud to myslis pro NT, tak:
1. GetStdHandle pro stdin
2. udelat overlapped read na R/W co chces
3. WaitForMultipleObjects - pro [1] a [2]
Na [1] se daji aplikovat veskere wait funknce a prejdou do signalizovaneho stavu, jeslize se na vstupu objevy nova data...
Ms/Win moc rad nemam, ale zrovna co se tyce synchonizace, jim *nix v drtive vetsine pripadu nesaha ani po paty, bohuzel :( Pokud clovek nekde potrebuje trochu vyssi uroven synchonizace a nedejbuh vice atomickych operaci (ala SignalObjectAndWait, ...) tak .... si rovnou muze napsat kompletne vlastni sync, aby to bylo jaks-taks porable a fungovalo dle predstav :(
Re: Asyns + sync IO
celé vláknoad synchronizace ve Widlich:
nejak pozapominate na bezpecnost a stabilitu, tyto funkce nevlastni ani jedno...
V Linuxu je jiz od verze 2.4.cosi implementovano pomerne slusne AIO (patch).
Vite ja jsem clovek ryze prakticky...
proto mi prosim vysvetlete jaktoze i kdyz Widle maji tak skvele implementovany asynchroni rezim jsou tak neuveritelne pomale (ve srovnani s Linuxem)
Re: Asyns + sync IO
celé vláknoNeuvěřitelně pomalé? Nevím, o kolik procent je Linux rychlejší a ne, že bych nějak miloval M$, ale na Windows NT 5.0 mi nikdo šahat nebude!-)
A jak je to s tou bezpečností a stabilitou u AIO by mě taky zajímalo. Myslíte, že takhle sestřelíte eNTýčka?
Já osobně považuju asychnonní IO za prasárnu a použil bych to jen po dotlačení okolnostmi. To raději budu důsledně používat vlákna (tedy na systémech, kde se "vlákna" nedělají přes odpudivé fork:-)
A ještě jeden detail. Jména wokenních syscallů jsou oproti těm unixovým mnohem čitelnější. Ne, že by mě to nějak trápilo, od toho hnusu dole se s radostí nechám odstínit nějakou tou Javou, Adou nebo .NETem. :-)
Re: Asyns + sync IO
celé vlákno> Jména wokenních syscallů jsou oproti těm unixovým
> mnohem čitelnější.
To me tedy neprijde, a pochybuji ze jsou pro programatory pisatelnejsi. Vubec z celych Windows cisi laska k psani na klavesnici. Srovnejte si treba
/home/vopicka vs C:\Documents and Settings\František Vopička
/opt vs C:\Program Files
/etc vs HKEY_LOCAL_MACHINE
eth0 vs Local network connection (v ceskych je to tusim "Připojení k místní síti" vcetne diakritiky - vyborne kdyz to nekam potrebujete napsat pres telnet)
atd.
Re: Asyns + sync IO
celé vláknoSynchronizacni funkce ve Win nejsou bezpecny? Mozna by sis o Win32 API mohl prvne neco precist, protoze ve Win maj synchronizacni handly (a jiny, jako treba procesy) ACL. Pokud programujes na Win32 nebezpecne tak jen protoze ses liny prase, ne proto ze by Win32 API nebylo bezpecny.
Samozrejme nemluvme o Win9x rade, ta je nastesti dneska uz historii (asi jako u Linuxu se uz dneska mluvi jen o 2.6 a 2.4 kernelech).
Re: Async + sync IO
celé vláknoZapoměl jsem dodat že mě to zajímá u Linuxu. Ale jestli to Linux neumí tak to může bejt cokolik jinýho co je svobodný software.
Re: Asyns + sync IO
celé vláknoUdělej aio_read na stdin a aio_read/write na tom souboru a pak pomocí aio_suspend počkej, až některá z těch operací doběhne.
plan9
celé vláknozdravim,
zaujimalo by ma, ci autor ma nejake skusenosti a aky je jeho nazor na plan9 (co by podla tvorcov mal byt unix buducnosti).
martin

