Rumah > Soal Jawab > teks badan
Ini dari buku NodeJS secara ringkas
Mengapa dikatakan bahawa memakan masa tak segerak bergantung pada fail yang paling perlahan Walaupun ia tidak segerak, bukankah ia perlu menyelesaikan satu tugasan sebelum melaksanakan yang berikutnya Adakah ia tidak bermakna bahawa kedua-dua kod dilaksanakan pada masa yang sama?
我想大声告诉你2017-05-31 10:41:42
同步I/O 是 1->2->3->4 这样的时间,为1+2+3+4的时间
异步I/O 是 --> 1
2
3
4
四个同时开始 时间为4个里面最慢的那个。。
Terdapat juga utas tunggal js Kod js asas yang anda tulis ialah utas tunggal Setelah ia adalah rangkaian asas atau fail I/O, ia akan memasuki gelung acara dan melakukan operasi serentak. . . 1234 bermula pada masa yang sama. Tiada siapa menunggu sesiapa.
phpcn_u15822017-05-31 10:41:42
Dijalankan pada masa yang sama tanpa campur tangan antara satu sama lain.
过去多啦不再A梦2017-05-31 10:41:42
Lapisan bawah tugas asynchronous node.js dilaksanakan dengan berbilang benang untuk tugasan tak segerak, nod mengekalkan kumpulan benang dikembalikan ke kumpulan benang
.淡淡烟草味2017-05-31 10:41:42
Serentak dan disegerakkan adalah dua perkara berbeza! Penyegerakan merujuk kepada susunan perkara yang dilaksanakan! Yang terakhir mesti bergantung pada keputusan yang pertama! Asynchronous dilakukan pada masa yang sama, tetapi hubungan antara perkara mempunyai sedikit kesan pada keseluruhan proses! Sebagai contoh, jika anda membuat beberapa permintaan ajax pada masa yang sama, tujuan anda hanyalah untuk meminta data dan memaparkan bahawa tiada korelasi antara data. Mari gunakan analogi! Ia seperti membina jalan raya! Pasti letakkan asfalt dahulu dan kemudian cat garisan! Jika tidak, anda akan merosakkan jalan berturap dengan melukis garisan semasa menurapnya! Pada masa ini, ia akan menjadi kucar-kacir jika ia mesti segerak dan tak segerak! Walau bagaimanapun, penandaan garisan, pembersihan jalan, dan pemasangan pagar jalan boleh dilakukan pada masa yang sama Ini dipanggil asynchronous dan tidak akan menjejaskan keputusan, tetapi ia juga akan menjadi lebih perlahan kerana pemasangan pagar adalah lebih kompleks daripada operasi lain akhirnya, keseluruhan proses telah selesai! Sebaliknya, jika anda memproses tiga yang terakhir secara serentak, masa menunggu akan menjadi lebih lama kerana anda perlu menunggu langkah sebelumnya untuk diproses sebelum memproses langkah seterusnya! Tetapi pada masa lalu, 10 orang sedang membina jalan Oleh kerana terdapat tiga perkara yang perlu diproses di peringkat kemudian, jika kita ingin mencapai pelaksanaan tidak segerak, kita terpaksa meningkatkannya kepada 30 orang (tidak begitu profesional di sini), tetapi selalunya terdapat lebihan sumber pengkomputeran Kita boleh menggunakan sumber tak segerak dengan cara ini.
阿神2017-05-31 10:41:42
Sesuatu program boleh menggunakan berbilang teras CPU untuk melaksanakan berbilang tugas secara selari pada masa yang sama Lapisan bawah sama ada berbilang benang atau berbilang proses.
Lapisan bawah Node ialah libuv.
Untuk membaca dan menulis rangkaian (I/O), libuv menggunakan mekanisme epoll yang disediakan oleh kernel pada Linux Lapisan bawah epoll dalam kernel Linux harus dilaksanakan menggunakan benang kernel, tetapi pelaksanaan lapisan bawah epoll tidak memerlukan. libuv untuk peduli, libuv hanya perlu Call.
Untuk membaca dan menulis fail (I/O), libuv mungkin menggunakan Linux AIO, atau ia mungkin menggunakan multi-threading untuk melaksanakannya kerana mekanisme membaca dan menulis fail tak segerak AIO yang disediakan oleh kernel Linux terutamanya menyediakan pangkalan data, contohnya , MySQL bergantung pada libaio.so . Kernel AIO semasa hanya menyokong mod O_DIRECT (DirectIO) untuk membaca dan menulis ke cakera Ini bermakna program tidak boleh menggunakan Cache Halaman cache sistem, dan ia memerlukan saiz dan mengimbangi bacaan dan tulis untuk diselaraskan dengan cara blok Ia mungkin baik untuk membaca dan menulis fail besar, tetapi ia tidak sesuai untuk fail kecil Jadi libuv harus menggunakan berbilang benang di lapisan bawah untuk melaksanakan pembacaan dan penulisan fail tak segerak.
Sama ada membaca dan menulis rangkaian atau membaca dan menulis fail, program sentiasa kembali apabila ia kembali, ia mesti kembali selepas semua tugasan selesai, jadi tugas yang memakan masa secara amnya adalah tugas dengan masa membaca dan menulis paling lama. Walau bagaimanapun, membaca dan menulis fail Ia mungkin dihadkan oleh cakera IOPS, yang pasti akan menyebabkan kesesakan, dan masa keseluruhan mungkin lebih lama.
Apabila Node digunakan untuk pengaturcaraan pelayan atau pengaturcaraan peringkat pertengahan pelayan, pembacaan dan penulisan rangkaian berlaku terutamanya.