ʻO libuv kahi waihona kākoʻo cross-platform me ka nānā ʻana i ka asynchronous I/O.
Ua kaulana ʻia ka hoʻokuʻu ʻana o ka mana hou o ka waihona libuv 1.45.0, ka mea i hoʻohana nui ʻia no ka hoʻopili multiplexing a me ka hoʻoponopono I/O asynchronous i nā papahana he nui e pili ana i ka hana kiʻekiʻe o ka hoʻoili ʻana i nā faila a me nā noi pūnaewele, no ka laʻana, ma ka platform Node.js, BIND 9, a me Knot.
No ka poʻe ʻike ʻole e pili ana i ka libuv, pono lākou e ʻike i kēia he waihona C cross-platform e hāʻawi i ke kākoʻo no ka I/O asynchronous ma muli o nā puka lou hanana. Kākoʻo ia i ka epoll Windows kqueue IOCP, nā awa hanana Solaris a ma Linux ʻo ia kekahi o nā hale waihona puke e kākoʻo ana i ka io_uring.
E pili ana i ka libuv
libuv ua hoʻolālā mua ʻia no ka hoʻohana ʻana ma Node.js, akā hoʻohana ʻia e nā papahana polokalamu ʻē aʻe. Ma mua, he abstraction a puni libev a i ʻole Microsoft IOCP, ʻoiai ʻaʻole kākoʻo ʻo libev iā IOCP ma Windows.
Waihona Puke hiki iā ʻoe ke hoʻonohonoho i kahi loop blocking o nā hanana e hoʻohana ana i nā ala e like me epoll ma Linux, kqueue ma BSD a me macOS, IOCP ma Windows, a me nā awa hanana ma Solaris
O ka nā hiʻohiʻona koʻikoʻi o libuv:
- Kākoʻo ʻia ka loop hanana hanana piha e ka epoll, kqueue, IOCP, nā awa hanana
- Nā kumu TCP a me ka UDP Asynchronous
- Hoʻoholo DNS Asynchronous
- Nā hana asynchronous o nā faila a me nā ʻōnaehana faila
- Nā hanana ʻōnaehana waihona
- Kākoʻo ʻo TTY i ke code pakele ANSI
- IPC me ke kaʻana like ʻana, me ka hoʻohana ʻana i nā kumu kikowaena Unix a i ʻole nā paipu i kapa ʻia (Windows)
- Kaʻina hana lua
- kolamu milo
- hōʻailona lawelawe
- uaki hoʻonā kiʻekiʻe
- ʻO nā hiʻohiʻona o ka threading a me ka synchronization primitives
Loaʻa nā hiʻohiʻona cross-platform no nā noi e hana pū me nā pilina pūnaewele TCP a me UDP ma ke ʻano asynchronous, asynchronous DNS resolution, asynchronous hana me nā faila, file system event tracking, IPC organization for socket sharing, hoʻonohonoho ʻana i kahi hōʻailona hōʻailona kolamu a hoʻohana kiʻekiʻe-pololei timers.
Waihona Puke komo pū me nā primitives e hoʻonohonoho i ka hoʻokō multi-threaded a me ka hoʻonohonoho ʻana i ka pae. Me ka hanana hanana, ʻelua mau kumu kumu abstract kiʻekiʻe i hoʻohana ʻia: "handlers" e hoʻokō i nā mea lōʻihi e hana i nā hana he nui, a me nā "noi" e hana i nā noi pōkole.
ʻO nā hiʻohiʻona hou o libuv 1.45
ʻO kahi hoʻomaikaʻi nui i ka mana hou ʻo ia ka ka hoʻokō ʻana i ke kākoʻo lōʻihi no ka io_uring asynchronous I/O interface Hāʻawi ʻia e ka Linux kernel mai ka mana 5.1.
Ma waho aʻe o kēia, e hōʻike ana i ka kākoʻo no ke koho balota I/O a me ka hiki ke hana me ka pale ʻole Me ka io_uring API, ua hoʻāʻo nā mea hoʻomohala kernel e hoʻoponopono i nā hemahema o ka interface aio kahiko. Ma ke ʻano o ka hana, kokoke loa ʻo io_uring iā SPDK a ʻoi aku ka maikaʻi ma mua o ka libaio ke hiki ke koho.
ma libuv, hiki ke hoʻohana ʻia ka io_uring interface ma nā kahua Linux me ka kernel 5.1+ i nā ʻano hana hoʻopunipuni asynchronous e like me ka heluhelu, kākau, fsync, fdatasync, stat, fstat, a me lstat. Ma nā ʻōnaehana hana ʻē aʻe a me nā ʻōnaehana me nā kernels kahiko, hoʻohana mau ʻia ka wai puna.
Ua ʻōlelo ʻia ua hōʻike ʻia nā hoʻokolohua hana i ka hoʻohana ʻana i ka io_uring i libuv hiki ke hoʻokō i ka piʻi ʻana o ka hana 8x. Ua kākoʻo ʻia ka hana o ka hoʻohui ʻana i ka io_uring i libuv e ka ISC (Internet Systems Consortium), nāna e hoʻohana i ka waihona i nīnau ʻia ma ka server BIND DNS.
ʻO nā hoʻomaikaʻi ʻē aʻe i ka mana hou e pili ana i ka e hoʻonohonoho ana i hoʻokahi puʻu 8 MB no ka puna wai ma nā hale hana a pau a me nā paepae.
Kākoʻo ʻia ʻia hoʻi hoʻohui i kahi API hou uv_metrics_info() e hōʻiliʻili i nā ana, e like me ka helu ʻike ma ka hanana hanana, ka huina o nā hanana i hana ʻia, a me ka helu o nā hanana e kali ana ma ka pila i ka manawa i hoʻouna ʻia ai ke noi.
Ma ka hopena, Inā makemake ʻoe e ʻike hou e pili ana i ia, pono ʻoe e ʻike ua kākau ʻia ke code papahana ma C a ua māhele ʻia ma lalo o ka laikini MIT. Hiki iā ʻoe ke nānā i nā kikoʻī I ka loulou aʻe.
E lilo i mea mua e wehewehe