ແມ່ນຫຍັງຄືຄວາມແຕກຕ່າງລະຫວ່າງສະຖາປັດຕະຍະ ກຳ ທີ່ຜັກດັນຂອງ Node.js ແລະການຂຽນໂປແກຼມ multithread ໃນພາສາອື່ນໆ?


ຕອບ 1:

ໃນທັງສອງເຫດການທີ່ ນຳ ໃຊ້ເຫດການແລະຫຼາຍພາສາ, ລະຫັດຖືກປະຕິບັດພາຍໃນຂັ້ນຕອນຂອງລະບົບປະຕິບັດການ.

ຖ້າຂະບວນການເຮັດວຽກຫລາຍກະທູ້, ກະທູ້ເຫຼົ່ານີ້ແບ່ງປັນຄວາມຊົງ ຈຳ ຂອງຂະບວນການ (ທີ່ຢູ່ທີ່ຢູ່) ສຳ ລັບການອ່ານແລະຂຽນ.

JavaScript, ເຊິ່ງໃຊ້ Node.js, ແມ່ນເສັ້ນດ່ຽວດຽວ. ທຸກໆ ໜ້າ ທີ່ໄດ້ຮັບການຮັບປະກັນວ່າມັນຈະຖືກ ດຳ ເນີນການຢ່າງເຕັມທີ່ແລະບໍ່ມີລະຫັດ JavaScript ອື່ນໃດປະຕິບັດໃນຂັ້ນຕອນປະຈຸບັນໃນລະຫວ່າງການປະຕິບັດ ໜ້າ ທີ່ນີ້. ກິດຈະ ກຳ ທີ່ບໍ່ເປັນ ທຳ ມະຊາດ (ເຄືອຂ່າຍ, ວັດສະດຸປ້ອນ / ຜົນຜະລິດ, ຈັບເວລາ, ເຫດການຮາດແວແລະລະບົບປະຕິບັດການອື່ນໆ) ແມ່ນ ດຳ ເນີນການໂດຍເຄື່ອງຈັກ, ເຊິ່ງເພີ່ມ ໜ້າ ທີ່ຂອງ JavaScript ທີ່ລົງທະບຽນເປັນຜູ້ຈັດການ (ຫຼືການເອີ້ນຄືນ) ສຳ ລັບເຫດການເຫຼົ່ານີ້ໃນແຖວແຖວເຫດການທີ່ຕ້ອງປະຕິບັດ ໜ້າ ທີ່. ກ່ອນທີ່ແຖວຈະ ສຳ ເລັດ.

ໃນ paradigm multithreaded, ສອງຫຼືຫຼາຍກະທູ້ປະຕິບັດລະຫັດໃນຂະຫນານ, ດັ່ງນັ້ນ, ໃນລະຫວ່າງການເຮັດວຽກທີ່ມີປະໂຫຍດ, ລະຫັດຊິ້ນສ່ວນທີ່ແຕກຕ່າງກັນກໍ່ອາດຈະຖືກປະຕິບັດຢູ່ໃນແກນໂປເຊດເຊີທີ່ແຕກຕ່າງກັນ, ອາດຈະເປັນການອ່ານຫຼືຂຽນໃສ່ທີ່ຢູ່ຂອງ ໜ່ວຍ ຄວາມ ຈຳ ດຽວກັນ. ນີ້ສາມາດນໍາໄປສູ່ສະຖານະພາບຄວາມຊົງຈໍາທີ່ບໍ່ສອດຄ່ອງເວັ້ນເສຍແຕ່ວ່າລະຫັດໃຊ້ກົນໄກລະບົບປະຕິບັດການພິເສດ (ການຊິ້ງຂໍ້ມູນເບື້ອງຕົ້ນ) ເພື່ອຈັດການການເຂົ້າເຖິງຫນ່ວຍຄວາມ ຈຳ ທີ່ແບ່ງປັນ.



ຕອບ 2:

ນີ້ແມ່ນ ຄຳ ຖາມທີ່ດີ: "ແມ່ນຫຍັງຄືຄວາມແຕກຕ່າງລະຫວ່າງສະຖາປັດຕະຍະ ກຳ ຂອງກິດຈະ ກຳ ຂອງ Node.j ແລະການຂຽນໂປແກຼມ multithread ໃນພາສາອື່ນໆ?"

ພວກເຮົາສາມາດແລະຄວນຫຼຸດຜ່ອນສິ່ງນີ້ ໜ້ອຍ ໜຶ່ງ.

  • ສະຖາປັດຕະຍະ ກຳ ທີ່ຂັບເຄື່ອນດ້ວຍເຫດການ

ສະຖາປັດຕະຍະ ກຳ ທີ່ຂັບເຄື່ອນດ້ວຍເຫດການບໍ່ໄດ້ມີຈຸດປະສົງໃຫ້ໃຊ້ ສຳ ລັບຂໍ້ເທົ່ານັ້ນ, ເຊັ່ນ: B. ພະຍຸທໍນາໂດ (Python), Vertx (Java), Akka (Scala), ReactiveX (ຫລາຍພາສາ).

  • ການຂຽນໂປແກມ Multithread ເປັນພາສາອື່ນໆ.

ໂດຍສັງເກດວ່າ JavaScript ບໍ່ຮອງຮັບກະທູ້ຫຼາຍໂດຍຄ່າເລີ່ມຕົ້ນ. ມັນສະ ໜັບ ສະ ໜູນ ພະນັກງານເວັບທີ່, ຕາມຄວາມຮູ້ຂອງຂ້ອຍ, ສາມາດເຮັດ ໜ້າ ທີ່ເປັນກະທູ້.

ເຫດຜົນທີ່ຜັກດັນແມ່ນບໍ່ພຽງແຕ່ສາມາດໃຊ້ໄດ້ ສຳ ລັບ nodes ເທົ່ານັ້ນ, ແລະການເຮັດ multithreading ສາມາດປະຕິບັດໃນຂໍ້ໄດ້.

ດັ່ງນັ້ນມັນສາມາດມີ ຄຳ ຖາມສອງຢ່າງ: "ຄວາມແຕກຕ່າງກັນລະຫວ່າງເຫດການແລະການເຮັດ multithreading" ແມ່ນຫຍັງແລະ "ຄວາມແຕກຕ່າງກັນລະຫວ່າງຂໍ້ແລະພາສາອື່ນໆ (ກອບ)" ແມ່ນຫຍັງ. ຂ້າພະເຈົ້າຈະສຸມໃສ່ຄົນສຸດທ້າຍຍ້ອນວ່ານີ້ເບິ່ງຄືວ່າຈຸດປະສົງຂອງ ຄຳ ຖາມ.

ສິ່ງທີ່ພິເສດຂອງ Node ແມ່ນຜູ້ຂຽນໄດ້ສ້າງມັນເພື່ອຫລີກລ້ຽງ I / O ເມື່ອສ້າງ web application. ວັດທະນະທໍາຂອງຊຸມຊົນຂອງໂຫນດແມ່ນການເນັ້ນ ໜັກ ແລະເສີມສ້າງຄວາມເຂັ້ມແຂງຂອງ I / O ທີ່ບໍ່ກີດຂວາງ. ທ່ານຈະບໍ່ພົບຫ້ອງສະຫມຸດຂອງພາກສ່ວນທີສາມຫຼາຍເກີນໄປ. ໃນຖານະນັກພັດທະນາໂດຍໃຊ້ Node, ທ່ານຄົງຈະບໍ່ສາມາດພົບກັບບັນດາສິ່ງກີດຂວາງທີ່ລະອຽດອ່ອນໃນລະຫັດຂອງທ່ານ. ໃນພາສາອື່ນໆ, ນັກພັດທະນາທີ່ໂງ່ຈ້າອາດຈະເຮັດໃຫ້ການໂທສາຍທີ່ບໍ່ມີປະສິດຕິພາບຫຼາຍ, ເຊັ່ນວ່າ B. ອ່ານຈາກການເຊື່ອມຕໍ່ຖານຂໍ້ມູນ.

ທີ່ຖືກເວົ້າວ່າ, ທ່ານຄວນອ່ານເພີ່ມເຕີມກ່ຽວກັບແບບ“ ຂະ ໜານ” ຫຼາຍແບບແລະເຂົ້າໃຈຈຸດດີແລະຂໍ້ດີຂອງແຕ່ລະຢ່າງ. ຈຸດເງິນໂບນັດ ສຳ ລັບການຮັບຮູ້ວ່າເປັນຫຍັງ multithreading ຈຶ່ງຍອມຮັບໄດ້ເປັນເວລາດົນນານ.



ຕອບ 3:

ຄວາມແຕກຕ່າງດ້ານແນວຄິດແມ່ນງ່າຍດາຍຫຼາຍທີ່ຈະຫໍ່ອ້ອມຫົວຂອງທ່ານ.

ໃນສະຖາປັດຕະຍະ ກຳ ຍ້ອນເຫດການ, ໂປຼແກຼມຂອງທ່ານ ດຳ ເນີນໄປໃນວົງແຫວນທີ່ມີເສັ້ນດ່ຽວຢ່າງຕໍ່ເນື່ອງ (ທ່ານສາມາດເຮັດໄດ້ຫຼາຍກະທູ້ໃນຂໍ້, ແຕ່ທ່ານບໍ່ ຈຳ ເປັນຕ້ອງກັງວົນກ່ຽວກັບເລື່ອງນັ້ນໃນເວລານີ້). ເມື່ອເຫດການເກີດຂື້ນ, ມີວຽກເຮັດງານ ທຳ ໃນການເອີ້ນສາຍທີ່ຕ້ອງໄດ້ຮັບການປະມວນຜົນໃນເວລາຫວ່າງຂອງໂປແກຼມ.

ສະຖາປັດຕະຍະ ກຳ Multithreaded ໂດຍທົ່ວໄປກະທູ້ ໃໝ່ ເມື່ອມັນຕ້ອງໄດ້ລໍຖ້າການກະ ທຳ. ດັ່ງນັ້ນທ່ານຈຶ່ງເຂົ້າໄປທີ່ຖານຂໍ້ມູນແລະສ້າງກະທູ້ ໃໝ່ ທີ່ເຮັດທຸກວຽກທີ່ ຈຳ ເປັນແລະໃຊ້ຂັ້ນຕອນທີ່ ຈຳ ເປັນເພື່ອເຮັດ ສຳ ເລັດຫຼືເຂົ້າຮ່ວມກະທູ້ເດີມ.

ວິທີການທັງສອງມີປະໂຫຍດຫຼາຍ ສຳ ລັບຈຸດປະສົງທີ່ແຕກຕ່າງກັນ. ເຫດການທີ່ຜັກດັນແມ່ນດີເລີດ ສຳ ລັບອິນເຕີເຟດຂອງຜູ້ໃຊ້ແລະເຄື່ອງແມ່ຂ່າຍເພາະວ່າໂປຼແກຼມຂອງທ່ານບໍ່ຮູ້ວ່າເຫດການ ໃໝ່ ເກີດຂື້ນແລະເຫດການມັກຈະເກີດຂື້ນໃນ spurts. ໃນຂະນະທີ່ການຂຽນກະທູ້ແມ່ນ ຈຳ ເປັນ ສຳ ລັບວຽກທີ່ສຸມໃສ່ຫຼາຍດ້ານເຊິ່ງທ່ານຕ້ອງການແບ່ງປັນບັນຫາອອກເປັນພາກສ່ວນທີ່ນ້ອຍກວ່າ (ຫຼືເຂົ້າຫາຂອບເຂດ ຈຳ ກັດຂອງວົງແຫວນດຽວຂອງທ່ານ).