Mekanik Mühendislik Temelleri
Mühendisler için Uygunluk ve Çok Hazırlanma Sorularını Anlamak
Table of Contents
Uygunluk ve çoklu okuma, mühendislerin hızlı, duyarlı ve ölçeklenebilir yazılımlar kurmalarına izin veren bilgisayar bilimleri için temel kavramlardır. Sistemler, eşzamanlı ve çok sayıda mimarlıka giderek güvendiği gibi, bu konuları ustalaştırma performansı şişeleri için gereklidir, veri bütünlüğü sağlamak ve verimli kaynak kullanımı sağlamak.Bu makale, her mühendisin ortak röportaj soruları ve pratik stratejileri, eş zamanlı ve çoklu hazır sistemlerle çalışırken bilmesi gerekir.
Ne Kıygınlık?
Eşlik, zaman zaman zaman zaman zamanlarını dengelemek için bir sistemin yeteneğine işaret eder. Bu, görevlerin aynı anda ()parallelism) yerine, sistemin infazlarını artırmak için birden fazla görevde ilerlemesini sağlamaz. Concurrency, özellikle I/O-bound veya interaktif uygulamalarda.
Eşlik birkaç mekanizma ile elde edilebilir:
- [FONT:0) Çokça oku [Dönder] – tek bir süreçte birden çok konu.
- [FONT:0) Çokişlem[Dönlemler[Dönlemler)[Dönlemler[Dönler: 1 ) – ayrı CPU çekirdeği üzerinde çalıştırılabilecek çok sayıda işlem.
- [FONT:0]Asynchronous programlama[[Dönetici: 1 ) – tek bir konuya birçok görevi (örneğin, çağrıları, gelecekleri veya birsen / bir bekleyiş kullanarak) tek bir konuya izin veren işlemler.
Modern işletim sistemleri ve runtimes, iş iplikleri, süreçler ve olay döngüleri gibi tutarlılık sağlar. Bu yaklaşımlar arasındaki ticaretten ayrılanlar mühendisler için temel bir yetenektir.
Daha derin bir şekilde koncurrency modellerine atfedin, [[Dönetici:0)Wikipedia'nın koncurrency) üzerinde makalesini okumayı düşünün.
Çok Okunma Anlamayı Anlayın
Multithreading, tek bir sürecin aynı hafıza alanını ve kaynaklarını paylaşan birden çok threadin bulunduğu antropency'in belirli bir uygulamasıdır.Her bir threadin kendi çağrı yığınını ve program sayacı vardır, ancak bir süreçteki tüm iplikleri okuyabiliyor ve paylaşabiliyor.Bu paylaşılan erişim hem güç hem de kırılganlık.
Multithreading'in temel yönleri şunlardır:
- [FONT:0]Küresel yaratım ve yönetim) - iplikler açıkça oluşturulabilir veya üstten kaçınmak için iş havuzları tarafından yönetilebilir.
- [FONT:0]Yaşam döngüsü[Dönemli, yeni, yönetilebilir, engellenmiş, beklenmeyen, beklenmeyen, bekleyecek, bekleyecek ve sona ermiş gibi durumlar.
- [FONT:0]Context switch[[Dönetici:0)[[Döncükler arasındaki OS anahtarları, bazı üstlere neden oluyor.
- [FONT:0) ⁇ kaynaklar - veri yapıları, dosyalar ve bağlantıların eş zamanlı erişimden korunması gerekir.
Multithreading özellikle paralelleştirilmiş olan CPU-bound görevleri için faydalıdır (örneğin, görüntü işleme, bilimsel simülasyonlar) ve diğer kişilerin çalışmaya devam ederken (örneğin, web sunucuları) için uygun olmayan görevler için yararlıdır.
Java multithreading üzerinde pratik rehberlik için, theFL:0)Oracle Java Concurrency öğreticisi[[Dönetici: 1 ) mükemmel bir kaynaktır.
Concurrency ve Multithreading arasındaki Anahtar Farklar
Sık sık sık değişmez olarak, koncurrency ve çoklu okuma farklı kavramlardır. Aşağıdaki tablo ana farklılıkları vurgulamaktadır (bir semantik liste kullanarak):
- [FONT:0]Concurrency[[Dönetici:0) Bir sistemin özelliğidir - aynı anda birden fazla görevi de halledebilir.Çok fazla işlem, veya birsenkron teknikleri ile elde edilebilir.
- [FONT:0)Multithreading[[Döncüm:0) Çokça okunan bir programlama tekniği, koncurrency elde etmek için tek bir süreçte birden çok thread kullanan bir programlama tekniğidir.
- Koncurrency, birden fazla görevi bir kez işlemek için yapılandırma programları üzerinde yoğunlaşır, ancak çoklu kullanım düşük seviyeli bir uygulama detayıdır.
- Multithreading, yarış koşulları ve hafıza tutarlılığı sorunları gibi sorunları ortaya koyan ortak hafızayı içerir. Daha yüksek düzeyde (örneğin, aktör modeli) paylaşılan bir devletten kaçınabilir.
- Bir sistem, tüm iplikleri kullanmadan eş zamanlı olabilir (örneğin, tek bir iplikle olay odaklı programlama).
- Gerçek paralellik birden çok CPU çekirdeği gerektirir, ancak koncurrency zamanlayıcı aracılığıyla tek bir temel üzerinde simüle edilebilir.
Mühendisler için Ortak Eşleştirme ve Çok Hazır Soruları
Mühendisler genellikle eşzamanlı programlar ve debug çoklu hazır kodlar hakkında bir sebepten dolayı test edilirler. Aşağıda ayrıntılı açıklamalar ile birkaç geniş soru vardır.
1. Yarış koşullarını nasıl engelleyebilirsiniz?
Bir yarış durumu, iki veya daha fazla threadin paylaşılan verilere uygun olarak eriştiği ve nihai sonuç, yürütmelerinin zamanlamasına bağlıdır: Önleme stratejileri şunları içerir:
- [FONT:0)Mutexes (locks)) - bir tek bir ipin bir seferde kritik bir bölüm girebilmelerini sağlar.
- [FONT:0)Semaphores[[Dönetici: 1 ) - kaynakların sonlu havuzuna erişim.
- [FONT:0]Atomik işlemler[[[Dönetici: 1) CPU seviyesindeki talimatları (örneğin, karşılaştırma-ve-swap) basit güncelleştirmeler için kullanır.
- [FONT=0)Oku-Yazar kilitleri [[Dönemli: 1) - eş zamanlı okumalara izin verin, ancak özel yazar.
- [FONT:0)Immutable nesneler[[[Dönetici: 1 ) – değiştirilemez verileri paylaşıyor, tamamen ırkları ortadan kaldır.
- [FONT:0]Thread-local depolama) - her bir konuya kendi veri kopyalarını verin.
Mekanizma seçimi, paylaşılan kaynağın doğasına ve gerekli performans özelliklerine bağlıdır.
2. Ölüler nedir ve nasıl kaçınılabilir?
Deadlock, iki veya daha fazla ipliklerin her biri bir başka iplik tarafından tutulan bir kaynak için beklediği bir durumdur, her şeyin sonsuza kadar durmasına neden olur. Ölüler için klasik koşullar şunlardır: karşılıklı dışlama, tutma ve bekleme, ön boşluk ve dairesel bekleme.
- [FONT:0]Kaynak hiyerarşisi[[Dönetici: 1) Kaynak için küresel bir sipariş tayin eder ve bu sırayla kilitler elde etmek için iplikler gerekir.
- [FONT:0]Timeouts[[Dönler: 1 ) - belirli bir süre sonra bir kilit serbest bırak ve yeniden deneme.
- [FONT:0]Deadlock algılama[[Dönetici: 1)) - ölülerin meydana gelmesine izin verir, ancak onları kırmak için bir mekanizmaya sahiptir (örneğin, bir iplike hükmetme).
- [FONT:0]Lock-free programlama[Dönetici:0][Döneticileri tamamen kilitlemeden kaçınmak için atom operasyonları kullanın.
Mühendisler, potansiyel ölüleri yakalamak için ağır kongresyon kalıpları ve test tasarlamalıdır.
3. Nasıl senkronizasyon performansına senkronizasyonu yapar?
senkronizasyon veri tutarlılığını sağlar ancak eki getirir. Anahtar performans ticaret-offları şunlardır:
- [FONT:0]Contention[Dönetici:0)[Döneticiler aynı kilit almaya çalışırsa, aynı kilitlemeyi serilerler, paralelliği azaltırlar.
- [FONT:0]Context switch[[[Dönetici:0)[[Dönetici:0)[Dön değiştirme[[Dönetici: 1 ) – Kilitler üzerinde blok, OS'yi bağlamları değiştirmek için zorlayan şeyler, ki bu pahalı.
- [FONT=0)Cache coherency[[DÜDÜT:1) - mühimmat verilerini paylaşmak CPU önbelleklerini geçersiz kılar, hafıza trafiğini arttırır.
- [FONT=0]Granularity[[Dönetici: FLT:1) paralellik geliştirmek, karmaşıklık ve risk ölüleri yükseltmek.
Kilit şeritli, okunuşu kilitleri ve mevcut veri yapıları (örneğin, ESFLT:0) denge güvenliği ve hızına yardımcı olur.
4. Java/C'deki anahtar kelimelerini açıklayın #. Ne problem çözülür?
[[Dönetici:2. anahtar kelime, değişkenin değerinin her zaman ana bellek için okunduğunu ve yazmadığını, thread-yerel caching'i önlemek için şu anda görünür: tüm iplikleri kontrol etmek için kullanılan bir yazı. ancak, [[DÜye Olmayanlar İçin Tıklayınız.
5. Bir iplik havuzu nedir ve bir tane ne zaman kullanmalısınız?
Bir thread havuzu, görevleri yerine getirmek için yeniden kullanılabilir olan önceden yaratılmış ipliklerin koleksiyonudur. Faydaların yanı sıra, Python'da iş yaratılması ve yırtılma, gelişmiş cevap süresi ve kontrollü kaynak kullanımı. Thread havuzları, birçok kısa ömürlü veya I/O-bound görevi kullanmak için idealdir, örneğin Java'da ve ).
Bakım, havuzu uygun şekilde boyutlandırmalıdır: CPU çekirdeğinin altında çok az sayıda iplik, çok fazla fazla aşırı bağlam geçişine ve hafıza tüketimine neden olsa da.
6. Amdahl Yasası nedir ve neden çoklu hazır performans için önemli?
Amdahl'in Yasası, birden fazla işlemci kullanarak bir programın hızının programdaki eşdeğer kısımla sınırlı olduğunu belirtir. Matematikematically: 0:0)Speedup = 1 / ( (1 - P) + P/N)), P paralel olarak, şifreleme tasarımı ve N'nin sayısı ile uyumlu.For example, if 10% of the code must run sequentially, the maximum speedup with the maximum cores is 10x.This law remembers to minimize to minimize the same.
Mühendisler için en iyi uygulamalar Concurrency ile birlikte çalışır
Güçlü ve yüksek performanslı koncurrent kodu yazmak için, bu yönergeleri takip edin:
- [FONT:0)Daha yüksek seviyeli soyutlar[[Dönetici: 1) - executor hizmetleri, iplik havuzları ve ham thread yönetimi yerine eş zamanlı koleksiyonlar kullanın.
- [FONT:0) İlk önce ()) kullanılabilir veriler - mümkün olan her yerde paylaşılan mutable devletten kaçının. mutable nesneler veya kopya yazma kalıpları kullanın.
- [FONT:0)Minie kilit kapsamı[[[Dönetici: 1))) - kritik işlemleri gerçekleştirmek için gerekli olan en kısa süre için kilitler tutar.
- [FONT:0] Basit operasyonlar için kilitlemesiz algoritmaları kullanın). – atom değişkenleri ve karşılaştırma-ve-swap kilitlerden daha verimli olabilir.
- [FONT:0) Gerçek koncurrency ([Dönetici) altında Test; ırkları, ölüleri ve veri yolsuzluklarını tespit etmek için stres test araçları ve iplikleri kullanın.
- [FONT=0)Dokuzlaştırma sözleşmeleri[Dönemli:0)[Dönemli:0)Belge senkronizasyon sözleşmeleri[[Dönemli: 1), hangi değişkenlerin kendilerini güvende ve hangi kilitler onları koruyor.
- [FONT:0)Consider alternatifler[[Dönemli: 1) aktör modelleri (örneğin, Akka), mesaj geçişi veya paylaşılan durumu azaltmak için reaktif akışlar.
Altta yatan platformun ayrıntılı bir anlayışı (örneğin, Java Memory Model, POSIX threadleri veya Python GIL) garip davranışların silinmesi için vazgeçilmezdir.
Sonuç Sonuç Sonuç Sonuç Sonuç Sonuç Sonuç Sonuç
Uygunluk ve çoklu okuma sadece teorik kavramlar değildir; doğrudan yazılım kalitesini etkileyen pratik araçlardır. Yarış koşullarını tespit ederek, ölüleri önlemek ve kaynak içeriğini yönetmek, mühendisler bu makalede vurgulanan röportaj soruları daha derin bir çalışma için bir başlangıç noktası temsil eder.Çok çekirdekli ve dağıtılmış bir hesaplama gelişmeye devam ettikçe, koncurrent execution hakkında bir neden her mühendis için kritik bir beceri kalacaktır.
Daha fazla okuma için, [[DeksforGeeks için uygun bir makale ve Baeldung'da Java koncurrency üzerinde kapsamlı kılavuz).