pbkdf2
ฟังก์ชั่นที่มีการใช้งานจาวาสคริ แต่มันเป็นจริงได้รับมอบหมายทุกงานที่จะต้องทำยัง C ++ ด้าน
env->SetMethod(target, "pbkdf2", PBKDF2);
env->SetMethod(target, "generateKeyPairRSA", GenerateKeyPairRSA);
env->SetMethod(target, "generateKeyPairDSA", GenerateKeyPairDSA);
env->SetMethod(target, "generateKeyPairEC", GenerateKeyPairEC);
NODE_DEFINE_CONSTANT(target, OPENSSL_EC_NAMED_CURVE);
NODE_DEFINE_CONSTANT(target, OPENSSL_EC_EXPLICIT_CURVE);
NODE_DEFINE_CONSTANT(target, kKeyEncodingPKCS1);
NODE_DEFINE_CONSTANT(target, kKeyEncodingPKCS8);
NODE_DEFINE_CONSTANT(target, kKeyEncodingSPKI);
NODE_DEFINE_CONSTANT(target, kKeyEncodingSEC1);
NODE_DEFINE_CONSTANT(target, kKeyFormatDER);
NODE_DEFINE_CONSTANT(target, kKeyFormatPEM);
NODE_DEFINE_CONSTANT(target, kKeyTypeSecret);
NODE_DEFINE_CONSTANT(target, kKeyTypePublic);
NODE_DEFINE_CONSTANT(target, kKeyTypePrivate);
env->SetMethod(target, "randomBytes", RandomBytes);
env->SetMethodNoSideEffect(target, "timingSafeEqual", TimingSafeEqual);
env->SetMethodNoSideEffect(target, "getSSLCiphers", GetSSLCiphers);
env->SetMethodNoSideEffect(target, "getCiphers", GetCiphers);
env->SetMethodNoSideEffect(target, "getHashes", GetHashes);
env->SetMethodNoSideEffect(target, "getCurves", GetCurves);
env->SetMethod(target, "publicEncrypt",
PublicKeyCipher::Cipher<PublicKeyCipher::kPublic,
EVP_PKEY_encrypt_init,
EVP_PKEY_encrypt>);
env->SetMethod(target, "privateDecrypt",
PublicKeyCipher::Cipher<PublicKeyCipher::kPrivate,
EVP_PKEY_decrypt_init,
EVP_PKEY_decrypt>);
env->SetMethod(target, "privateEncrypt",
PublicKeyCipher::Cipher<PublicKeyCipher::kPrivate,
EVP_PKEY_sign_init,
EVP_PKEY_sign>);
env->SetMethod(target, "publicDecrypt",
PublicKeyCipher::Cipher<PublicKeyCipher::kPublic,
EVP_PKEY_verify_recover_init,
EVP_PKEY_verify_recover>);
ทรัพยากร: https://github.com/nodejs/node/blob/master/src/node_crypto.cc
โมดูล Libuv มีความรับผิดชอบอื่นที่เกี่ยวข้องกับฟังก์ชันเฉพาะบางอย่างในไลบรารีมาตรฐาน
สำหรับการเรียกใช้ฟังก์ชันไลบรารีมาตรฐานด้านโหนด C ++ และ Libuv ตัดสินใจทำการคำนวณราคาแพงนอกวงเหตุการณ์ทั้งหมด
แทนที่จะใช้สิ่งที่เรียกว่าเธรดพูลเธรดพูลคือชุดของเธรดสี่ชุดที่สามารถใช้สำหรับการทำงานที่มีราคาแพงเช่นpbkdf2
ฟังก์ชัน
โดยค่าเริ่มต้น Libuv จะสร้าง 4 เธรดในพูลเธรดนี้
นอกเหนือจากเธรดที่ใช้ในลูปเหตุการณ์แล้วยังมีเธรดอื่นอีกสี่เธรดที่สามารถใช้เพื่อถ่ายการคำนวณราคาแพงที่ต้องเกิดขึ้นภายในแอปพลิเคชันของเรา
ฟังก์ชันหลายอย่างที่รวมอยู่ในไลบรารีมาตรฐานโหนดจะใช้ประโยชน์จากเธรดพูลนี้โดยอัตโนมัติ pbkdf2
หนึ่งฟังก์ชั่นความเป็นอยู่ของพวกเขา
การมีเธรดพูลนี้มีความสำคัญมาก
ดังนั้นโหนดจึงไม่ได้เป็นเธรดเดียวอย่างแท้จริงเนื่องจากมีเธรดอื่น ๆ ที่โหนดใช้สำหรับการทำงานบางอย่างที่มีราคาแพง
หากกลุ่มเหตุการณ์มีหน้าที่รับผิดชอบในการทำงานที่มีราคาแพงดังนั้นแอปพลิเคชันโหนดของเราก็ไม่สามารถทำอะไรได้อีก
ซีพียูของเรารันคำสั่งทั้งหมดภายในเธรดทีละตัว
ด้วยการใช้เธรดพูลเราสามารถทำสิ่งอื่น ๆ ภายในเหตุการณ์ลูปในขณะที่การคำนวณเกิดขึ้น