Namun, Moore yang sama pada tahun 2003 menerbitkan karya “No Exponential is Forever: But“ Forever ”Can Be Delayed! Di mana dia mengakui bahwa pertumbuhan eksponensial kuantitas fisik untuk waktu yang lama tidak mungkin. Hanya evolusi transistor dan teknologi manufakturnya yang memungkinkan untuk memperpanjang hukum selama beberapa generasi lagi.
Pada tahun 2007, Moore menyatakan bahwa hukum jelas akan segera berhenti beroperasi karena sifat atom materi dan kecepatan pembatasan cahaya. Saat ini, ukuran maksimum transistor dalam sebuah prosesor adalah 5 nanometer. Ada juga sampel uji coba prosesor 3nm, tetapi peluncurannya tidak akan dimulai hingga 2021. Hal ini menunjukkan bahwa peningkatan lebih lanjut dalam jumlah transistor pada sebuah chip akan segera berhenti (sampai bahan baru ditemukan atau proses teknologi diperbarui secara radikal).
Salah satu solusi untuk masalah ini adalah komputasi paralel. Istilah ini dipahami sebagai cara mengatur komputasi komputer di mana program dikembangkan sebagai sekumpulan proses komputasi yang saling berinteraksi yang bekerja secara paralel (simultan).
Komputasi paralel dengan metode sinkronisasi dibagi menjadi dua jenis.
Pada varian pertama, interaksi proses terjadi melalui memori bersama: utas eksekusi terpisah diluncurkan pada setiap prosesor di sistem multiprosesor. Semua utas termasuk dalam satu proses. Threads bertukar data melalui area memori bersama untuk proses tertentu. Jumlah utas sesuai dengan jumlah prosesor. Stream dibuat baik dengan bahasa pemrograman (misalnya, Java, C #, C ++ dari C ++ 11, C dari C11), atau menggunakan library. Dalam hal ini, dimungkinkan untuk membuat utas secara eksplisit (misalnya, dalam C / C ++ menggunakan PThreads), secara deklaratif (misalnya, menggunakan pustaka OpenMP), atau secara otomatis - menggunakan alat kompilator bawaan (misalnya, Fortran Kinerja Tinggi). Varian yang dijelaskan dari pemrograman paralel biasanya membutuhkan beberapa bentuk penangkapan kontrol (mutex, semaphores,monitor) untuk mengoordinasikan arus di antara mereka sendiri.
Pada varian kedua, interaksi dilakukan dengan menggunakan transmisi pesan. Proses single-threaded dimulai pada setiap prosesor dalam sistem multiprosesor dan berkomunikasi dengan proses lain yang berjalan pada prosesor lain menggunakan pesan. Proses dibuat secara eksplisit dengan memanggil fungsi yang sesuai dari sistem operasi, dan pesan dipertukarkan menggunakan perpustakaan khusus (misalnya, implementasi protokol MPI), atau menggunakan alat bahasa (misalnya, High Performance Fortran, Erlang, atau occam).
Selain dua yang dijelaskan di atas, opsi hybrid juga digunakan: pada sistem multiprosesor dengan memori terdistribusi (DM-MIMD), di mana setiap node sistem adalah multiprosesor dengan memori bersama (SM-MIMD), pendekatan berikut dapat digunakan. Proses multi-utas diluncurkan pada setiap node sistem, yang mendistribusikan utas di antara prosesor node ini. Pertukaran data antar utas pada sebuah node dilakukan melalui memori bersama, dan pertukaran data antar node - melalui transfer pesan. Dalam hal ini, jumlah proses ditentukan oleh jumlah node, dan jumlah utas ditentukan oleh jumlah prosesor pada setiap node. Metode hybrid dari pemrograman paralel lebih rumit (diperlukan untuk menulis ulang program paralel dengan cara khusus), tetapi paling efisien dalam menggunakan sumber daya perangkat keras dari setiap node dari sistem multiprosesor.
Pada artikel ini, saya mengusulkan untuk mengadaptasi pendekatan hybrid untuk memparalelkan komputasi dengan Python. Fitur utama dari pekerjaan ini adalah penggunaan teknologi buruh pelabuhan-kontainer. Kerangka kerja yang sedang dikembangkan akan memiliki arsitektur klien-server, yang mencakup elemen-elemen berikut.
Di sisi klien:
- Serializer: sesuai dengan namanya, serialisasi fungsi dan variabelnya (yaitu, memungkinkan mereka untuk disimpan ke perangkat eksternal atau jaringan dan kemudian dimuat ke dalam memori pada node yang sama atau lainnya). Perlu juga menyoroti dekorator paralel, yang merupakan fungsi pembungkus yang memungkinkan Anda menggunakan serializer untuk berbagai jenis fungsi.
- Kelas untuk konfigurasi koneksi server / cluster
- Alat bahasa tambahan untuk menandai fungsi yang akan diparalelkan.
Sisi server:
- Deserializer - dengan demikian, deserialisasi data yang diterima (lihat di atas).
- Executor adalah kelas yang memproses data deserialisasi (fungsi dan argumennya), dan juga menginstal pustaka yang diperlukan ke dalam lingkungan virtual interpreter Python.
Arsitektur umum dari sistem yang sedang dikembangkan ditunjukkan pada gambar.

Untuk komunikasi antara klien dan server, soket atau kerangka kerja bengkok dapat digunakan, interaksi yang akan dilakukan melalui API yang dikembangkan.
Implementasi sistem ini mengasumsikan penggunaan teknologi buruh pelabuhan. Hal ini memungkinkan Anda untuk memberikan kenyamanan dan kecepatan tinggi konfigurasi perangkat lunak untuk memulai: cukup mulai cluster docker-swarm, gunakan gambar buruh pelabuhan di server yang dipilih dan atur jumlah replikasi.
Keuntungan penting lainnya menggunakan teknologi buruh pelabuhan adalah terciptanya lingkungan komputasi yang homogen dengan memvirtualisasikan sistem mirip UNIX (Ubuntu - Alpine Linux yang ringan), serta adanya mode swarm, yang memungkinkan Anda untuk menjalankan banyak wadah di server yang berbeda dan dengan cepat menyeimbangkan beban dengan mentransfer tugas ke wadah gratis ...
Kerangka kerja yang dikembangkan dapat digunakan di berbagai bidang di mana diperlukan untuk melakukan komputasi dalam jumlah besar dalam bahasa Python, termasuk pembelajaran mesin dan tugas analisis data yang mendalam, serta untuk tugas yang lebih sederhana, misalnya, untuk pemeriksaan keputusan terdistribusi selama kompetisi pemrograman.