Rust ਅਸਿੰਕ ਬਲਾਕਿੰਗ, Rayon ਅਤੇ ਆਧੁਨਿਕ ਐਪਲੀਕੇਸ਼ਨਾਂ
async Rust ਵਿੱਚ "ਬਲੌਕਿੰਗ" ਦਾ ਕੀ ਅਰਥ ਹੈ, ਜਦੋਂ Rayon CPU-ਬਾਉਂਡ ਕੰਮ ਨੂੰ ਫਿੱਟ ਕਰਦਾ ਹੈ, ਅਤੇ Rust APIs, ਕਿਨਾਰੇ, ਏਜੰਟਾਂ, ਅਤੇ CI/CD ਪਲੇਟਫਾਰਮਾਂ ਲਈ ਕਿਉਂ ਮਜ਼ਬੂਤ ਰਹਿੰਦਾ ਹੈ।
Workstationਇਸ ਬਾਰੇ ਕਿ Rust ਆਧੁਨਿਕ ਐਪਲੀਕੇਸ਼ਨਾਂ ਲਈ ਪਹਿਲੀ-ਸ਼੍ਰੇਣੀ ਦੀ ਚੋਣ ਕਿਉਂ ਰਹਿੰਦਾ ਹੈ — ਅਤੇ ਜਦੋਂ ਤੁਸੀਂ Tokio ਨੂੰ CPU-ਭਾਰੀ ਕੰਮ ਨਾਲ ਮਿਲਾਉਂਦੇ ਹੋ ਤਾਂ "ਬਲਾਕ ਕਰਨ" ਦਾ ਅਸਲ ਵਿੱਚ ਕੀ ਮਤਲਬ ਹੁੰਦਾ ਹੈ। Alice Ryhl ਦੇਅਸਿੰਕ ਤੋਂ ਪ੍ਰੇਰਿਤ: ਬਲੌਕਿੰਗ ਕੀ ਹੈ?(Rayon ਭਾਗ)। ਡੂੰਘੀ ਗੋਤਾਖੋਰੀ:ਲੰਬਾ ਲੇਖ।
.awaitਤੋਂ ਇੰਨਾ ਦੂਰ ਰੱਖਣਾ ਕਿ ਹੋਰ ਕੰਮ ਭੁੱਖੇ ਰਹਿਣ। Tokio ਦੇ ਪੂਲ ਤੋਂ ਮਹਿੰਗੇ CPU ਕੰਮ ਨੂੰ ਹਟਾਓ — ਅਕਸਰRayonਅਤੇ ਇੱਕ oneshot ਚੈਨਲ ਦੇ ਨਾਲ — ਅਤੇ APIs, ਕਿਨਾਰੇ ਪ੍ਰੌਕਸੀਜ਼, ਏਜੰਟਾਂ, ਅਤੇ CI/CD ਕੰਟਰੋਲ ਪਲੇਨਾਂ ਲਈ ਅਸਿੰਕ ਮਾਰਗ ਨੂੰ ਜਵਾਬਦੇਹ ਰੱਖੋ।Rust ਆਧੁਨਿਕ ਐਪਲੀਕੇਸ਼ਨ ਸਲੋਟ
ਕਿਉਂ ਜਿੱਤਦਾ ਰਹਿੰਦਾ ਹੈਟੀਮਾਂ Rust ਨੂੰ ਚੁਣਦੀਆਂ ਹਨ ਜਦੋਂ ਉਹਨਾਂ ਨੂੰ GC ਵਿਰਾਮ ਟੈਕਸ ਦੇ ਬਿਨਾਂ ਮੈਮੋਰੀ ਸੁਰੱਖਿਆ ਦੀ ਲੋੜ ਹੁੰਦੀ ਹੈ, ਲੋਡ ਦੇ ਅਧੀਨ ਅਨੁਮਾਨਿਤ ਲੇਟੈਂਸੀ, ਅਤੇ ਸਮਰੂਪਤਾ ਜੋ ਕਿ ਟਾਈਪ ਸਿਸਟਮ ਤੁਹਾਨੂੰ ਸਹੀ ਹੋਣ ਵਿੱਚ ਮਦਦ ਕਰਦਾ ਹੈ। ਇਹ ਸੁਮੇਲ ਹਰ ਥਾਂ 'ਤੇ ਦਿਖਾਈ ਦਿੰਦਾ ਹੈ ਜਿੱਥੇ Workstation ਬਣਦੇ ਹਨ: ਉੱਚ-ਥਰੂਪੁੱਟ APIs, ਕਿਨਾਰੇ ਗੇਟਵੇ, ਏਜੰਟ ਰਨਟਾਈਮ, ਅਤੇ ਪ੍ਰੋਮੋਸ਼ਨ ਕੰਟਰੋਲ ਪਲੇਨ ਜੋ ਕਿ CPU ਦੇ ਕੰਮ ਦੀ ਇੱਕ ਸਪਾਈਕ ਆਉਣ 'ਤੇ ਫ੍ਰੀਜ਼ ਨਹੀਂ ਹੋ ਸਕਦੇ।
ਇਹ "ਹਰ ਚੀਜ਼ ਲਈ Rust" ਨਹੀਂ ਹੈ। ਸਾਡੀਆਂPolyglot Benchmarksਡੈਸ਼ਬੋਰਡ ਅਤੇ ਸਾਥੀ ਪੋਸਟਾਂ —ਬਲੌਗ/ਲੇਖ— Rust ਦੀ ਤੁਲਨਾ Go, Bun, JVM ਸਟੈਕ, ਅਤੇ ਉਸੇ HTTP ਵਰਕਲੋਡਾਂ 'ਤੇ ਸਕ੍ਰਿਪਟਿੰਗ ਕਿਨਾਰਿਆਂ ਨਾਲ ਕਰੋ। Rust ਅਕਸਰ CPU-ਬੱਧ ਅਤੇ ਸਮਕਾਲੀ-ਭਾਰੀ ਕਤਾਰਾਂ 'ਤੇ ਅਗਵਾਈ ਕਰਦਾ ਹੈ; ਹੋਰ ਰਨਟਾਈਮ ਵੇਗ ਜਾਂ ਕਿਨਾਰੇ ਦੇ ਰੂਪਾਂਤਰਾਂ 'ਤੇ ਜਿੱਤਦੇ ਹਨ। ਬਿੰਦੂ ਸਬੂਤ ਹੈ, ਫਿਰ ਏ.ਡੀ.ਆਰ.
async Rust
ਵਿੱਚ "ਬਲੌਕ ਕਰਨ" ਦਾ ਕੀ ਅਰਥ ਹੈਅਸਿੰਕ ਰਨਟਾਈਮ (Tokio ਅਤੇ ਦੋਸਤ).awaitਪੁਆਇੰਟਾਂ 'ਤੇ ਕਾਰਜਾਂ ਨੂੰ ਸਵੈਪ ਕਰੋ। ਜੇਕਰ ਤੁਹਾਡਾ ਕੰਮ CPU ਦੇ ਮਿਲੀਸਕਿੰਟ ਬਰਨ ਕਰਦਾ ਹੈ ਜਾਂ ਬਿਨਾਂ ਉਡੀਕ ਕੀਤੇstd::thread::sleepਨਾਲ ਸੌਂਦਾ ਹੈ, ਤਾਂ ਕਰਮਚਾਰੀ ਉਸ ਧਾਗੇ 'ਤੇ ਕਿਸੇ ਹੋਰ ਨੂੰ ਤਹਿ ਨਹੀਂ ਕਰ ਸਕਦਾ ਹੈ। ਸਥਾਨਕ ਤੌਰ 'ਤੇ ਤੁਸੀਂ ਸ਼ਾਇਦ ਨੋਟਿਸ ਨਾ ਕਰੋ (ਕੁਝ ਕੋਰ ਬੱਗ ਨੂੰ ਲੁਕਾਉਂਦੇ ਹਨ); ਉਤਪਾਦਨ ਵਿੱਚ ਤੁਹਾਡੇ ਕੋਲ ਕਾਮੇ ਖਤਮ ਹੋ ਜਾਂਦੇ ਹਨ ਅਤੇ ਲੇਟੈਂਸੀ ਦੀਆਂ ਪੂਛਾਂ ਫਟ ਜਾਂਦੀਆਂ ਹਨ।
ਈਕੋਸਿਸਟਮ ਤੋਂ ਅੰਗੂਠੇ ਦਾ ਨਿਯਮ: ਲੇਟੈਂਸੀ-ਸੰਵੇਦਨਸ਼ੀਲ ਸੇਵਾਵਾਂ ਦੀ ਉਡੀਕ ਦੇ ਵਿਚਕਾਰ ਦਸਾਂ ਤੋਂ ਸੈਂਕੜੇ ਮਾਈਕ੍ਰੋਸਕਿੰਟਾਂ ਦੇ ਅੰਦਰ ਰਹੋ — ਅਤੇ ਕਿਸੇ ਵੀ ਹੋਰ ਕੰਮ ਦੇ ਤੌਰ 'ਤੇ ਲੰਬੇ ਸਮੇਂ ਤੱਕ ਕੰਮ ਕਰੋ।
ਜਦੋਂ Rayon ਮਦਦ ਕਰਦਾ ਹੈ (CPU-ਬਾਉਂਡ)
- spawn_blocking— Tokio ਦਾ ਬਲਾਕਿੰਗ ਪੂਲ: ਸਿੰਕ IO (ਫਾਈਲ ਸਿਸਟਮ, ਬਲਾਕਿੰਗ DB ਡਰਾਈਵਰਾਂ) ਲਈ ਵਧੀਆ; ਭਾਰੀ CPU ਲਈ ਸਬ-ਅਪਟੀਮਲ ਕਿਉਂਕਿ ਇਹ ਕੋਰ ਨੂੰ ਓਵਰਸਬਸਕ੍ਰਾਈਬ ਕਰ ਸਕਦਾ ਹੈ।
- Rayon— ਸਮਾਨਾਂਤਰ ਦੁਹਰਾਓ ਅਤੇ ਮਹਿੰਗੇ ਗਣਨਾਵਾਂ ਲਈ ਇੱਕ ਛੋਟਾ, CPU-ਆਕਾਰ ਦਾ ਥਰਿੱਡ ਪੂਲ।
rayon::spawn+tokio::sync::oneshotਨਾਲ ਬ੍ਰਿਜ ਤਾਂ ਜੋ ਅਸਿੰਕ ਟਾਸਕ ਰਨਟਾਈਮ ਥ੍ਰੈਡ ਨੂੰ ਬਲੌਕ ਕੀਤੇ ਬਿਨਾਂ ਨਤੀਜੇ ਦੀ ਉਡੀਕ ਕਰੇ। - ਸਮਰਪਿਤ ਥ੍ਰੈੱਡ— ਹਮੇਸ਼ਾ ਲਈ ਲੂਪਸ (ਕੁਨੈਕਸ਼ਨ ਪ੍ਰਬੰਧਕ, ਲੰਬੇ ਸਮੇਂ ਤੋਂ ਕੰਮ ਕਰਨ ਵਾਲੇ ਕਰਮਚਾਰੀ) ਲਈ ਜਿਨ੍ਹਾਂ ਨੂੰ ਸਥਾਈ ਤੌਰ 'ਤੇ ਪੂਲ ਸਮਰੱਥਾ ਦੀ ਵਰਤੋਂ ਨਹੀਂ ਕਰਨੀ ਚਾਹੀਦੀ।
ਉਹ Rayon + oneshot ਪੈਟਰਨ ਬਿਲਕੁਲ ਉਹੀ ਹੈ ਜੋRayon ਸੈਕਸ਼ਨਵਿੱਚ Alice Ryhl ਦੁਆਰਾ ਚੱਲਦਾ ਹੈ — Workstation ਦਾ ਵਿਚਾਰ ਇਹ ਹੈ ਕਿ ਉਹ ਵਿਕਲਪ ਪੌਲੀਗਲੋਟ ਅਸਟੇਟ ਸ਼ਿਪਿੰਗ ਏਜੰਟਾਂ ਅਤੇ ਪਲੇਟਫਾਰਮਾਂ ਵਿੱਚ ਕਿਵੇਂ ਆਉਂਦੇ ਹਨ, ਟਿਊਟੋਰਿਅਲ ਦਾ ਮੁੜ ਪ੍ਰਿੰਟ ਨਹੀਂ।
ਜਿੱਥੇ ਇਹ Workstation ਉਤਪਾਦਾਂ
ਵਿੱਚ ਦਿਖਾਈ ਦਿੰਦਾ ਹੈ- APIs ਅਤੇ ਕਿਨਾਰੇ— ਬੇਨਤੀ ਕਰਮਚਾਰੀਆਂ ਨੂੰ IO ਲਈ ਮੁਫ਼ਤ ਰੱਖੋ; ਫੈਨ CPU Rayon ਵਿੱਚ ਬਦਲ ਜਾਂਦਾ ਹੈ ਜਦੋਂ ਇੱਕ ਗਰਮ ਮਾਰਗ ਨੂੰ ਇਸਦੀ ਲੋੜ ਹੁੰਦੀ ਹੈ।
- ਏਜੰਟ— ਏਮਬੈਡਿੰਗ ਪ੍ਰੀਪ, ਈਵਲ ਬੈਚ, ਅਤੇ ਟੂਲ-ਸਾਈਡ ਕਰੰਚ ਨੂੰ ਆਰਕੈਸਟ੍ਰੇਸ਼ਨ ਲੂਪ ਨੂੰ ਰੋਕ ਨਹੀਂ ਦੇਣਾ ਚਾਹੀਦਾ।
- CI/CD ਪਲੇਟਫਾਰਮ— ਸਿਹਤ ਜਾਂਚ ਅਤੇ ਪ੍ਰੋਮੋਸ਼ਨ ਇੰਜਣ (ਵੇਖੋRing Promoter) ਜਵਾਬਦੇਹ ਰਹਿੰਦੇ ਹਨ ਜਦੋਂ ਕਿ ਭਾਰੀ ਤਸਦੀਕ ਦਾ ਕੰਮ ਆਫ-ਪੂਲ ਚੱਲਦਾ ਹੈ।
- Kubernetes ops— ਘਟਨਾ ਸਹਿ-ਪਾਇਲਟ ਜਿਵੇਂ ਕਿKubePilotਨੂੰ ਤਸੱਲੀਬਖਸ਼ ਕੰਟਰੋਲ ਲੂਪਸ ਦੀ ਲੋੜ ਹੁੰਦੀ ਹੈ ਭਾਵੇਂ ਵਿਸ਼ਲੇਸ਼ਣ CPU-ਭਾਰੀ ਹੋਵੇ।
ਅਗਲਾ
ਪੜ੍ਹੋ- ਲੰਮਾ ਲੇਖ— ਚੀਟ ਸ਼ੀਟ, ਕੋਡ-ਆਕਾਰ ਦੇ ਪੈਟਰਨ, ਅਤੇ ਆਰਕੀਟੈਕਚਰ ਨੋਟਸ।
- polyglot-benchmarks.fictionally.org— ਲਾਈਵ Rust ਬਨਾਮ ਸਾਥੀ ਸਬੂਤ।
- Alice Ryhl —ਅਸਿੰਕ: ਬਲਾਕਿੰਗ ਕੀ ਹੈ?
Workstationਦੁਆਰਾ ਪ੍ਰਕਾਸ਼ਿਤ।