Sinkronisasi dan asinkron proses

Dunia dapat belajar banyak dari para programmer. Dia sudah belajar, tetapi tidak dengan cara yang salah. Sebagai contoh, saya mengambil proses dan algoritma, tetapi tidak melihat pendekatan seperti asynchrony.

Setiap programmer mengerti apa itu sinkronisasi dan asinkron. Itulah seberapa banyak hal ini dipahami oleh programmer, sehingga tidak dapat dipahami oleh pengembang proses biasa.

Tindakan sinkron dari suatu proses adalah tindakan yang dieksekusi di utas utama, dalam satu contoh proses. Perbedaan utama antara mode sinkron: tindakan selanjutnya dimulai hanya ketika yang sebelumnya selesai. Oleh karena itu, sampai satu tindakan selesai, proses dipertaruhkan.

Tindakan asinkron adalah tindakan yang berjalan paralel dengan utas utama, baik dalam proses yang sama atau dalam proses lain secara bersamaan. Perbedaan utama antara mode asinkron: eksekusi paralel dari dua atau lebih cabang proses.

Proses sinkron, seperti program, jauh lebih mudah untuk ditulis dan didebug, sehingga pendekatan proses desain ini sangat umum. Ada banyak yang harus dilakukan dengan asinkron, terutama dengan penunjukan titik transisi ke eksekusi paralel dan kembali ke arus utama. Tidak ada janji dalam hidup.

Misalnya, proses pengadaan yang sama berdasarkan permintaan. Ini digambarkan sebagai urutan tindakan standar: permintaan telah muncul, pemasok memilih pemasok, meminta syarat dan biaya, setuju dengan penjual atau departemen pengendalian internal, membentuk pesanan dengan pemasok, meminta penilaian rekanan di departemen hukum atau di departemen akuntansi, membuat aplikasi pembayaran, menunggu pembayaran ini, memonitor pesanan, kemudian mengatur atau melacak posting di gudang, sehingga, pada akhirnya, menutup aplikasi. Proses ini sepenuhnya disinkronkan.

Sekarang bayangkan - dalam sistem informasi kami, layanan pemasok yang mengevaluasi tidak terhubung. Jadi, departemen hukum perlu mengumpulkan informasi dari sumber terbuka. Ini berarti bahwa penilaian membutuhkan waktu. Mengingat antrian aplikasi ke pengacara, tiga hari akan berlalu.

Apa yang akan terjadi pada proses saat ini? Menurut logika sinkron, itu akan dipertaruhkan. Pemasok, yang menjadi elemen sejati sistem, tidak akan bergerak sampai ia menerima penilaian pemasok - terutama jika sanksi diberikan untuk bekerja dengan rekanan yang tidak diverifikasi.

Bisakah kita menambahkan sinkronisasi di sini? Tentu saja Pada saat itu, ketika pemasok memilih pemasok, dia dapat mengirim aplikasi untuk evaluasi rekanan ke departemen hukum, dan sementara dia akan bernegosiasi, menyepakati harga dan ketentuan. Pada saat dia siap untuk melakukan pemesanan, dan evaluasi akan tiba tepat waktu. Proses akan berakhir lebih awal tiga hari.

Tentu saja, pengacara dapat marah - untuk apa kita akan mengevaluasi pemasok, jika Anda belum memutuskan di sana, akankah Anda memesan darinya? Apa yang harus mereka jawab?

Solusinya menunjukkan sendiri, kami telah menunjukkan itu di atas - untuk menghubungkan layanan penilaian pemasok. Sekarang kita bahkan lebih mengerti mengapa itu diperlukan - untuk memberikan sinkronisasi dan mempercepat proses. Meskipun, layanan ini mungkin hanya akan sinkron. Apa yang kamu pikirkan

Jika layanan tidak terhubung, maka penilaian ini dapat dibenarkan oleh karya "penggunaan masa depan". Jika sistem informasi Anda memiliki tempat untuk merekam data penilaian, maka pada saat Anda perlu bekerja dengan pemasok ini, Anda tidak perlu lagi menghubungi departemen hukum. Tentu saja, penilaian memiliki tanggal kedaluwarsa, tetapi dapat digunakan dalam batas wajar tertentu.

Dalam asinkroni, tidak adanya jaminan biasanya menakutkan, yaitu risiko hasil negatif pada salah satu cabang paralel dari proses. Bagaimana jika rekonsiliasi gagal?

Di sini Anda memerlukan statistik. Jika Anda bekerja dengan proses yang ada, maka kira-kira, atau akurat, bayangkan seberapa sering tindakan tertentu berakhir secara negatif - misalnya, koordinasi. Dari probabilitas inilah seseorang harus melanjutkan dengan memulai eksekusi paralel.

Asynchrony secara langsung memohon untuk semua proses koordinasi. Jika Anda bekerja di sana hanya dalam mode sinkron, dan bahkan mengikuti jejak koordinator, rantai panjang dan saling tergantung dibangun, menghasilkan birokrasi dan tanggung jawab bersama.

Contoh khas: "Saya akan setuju hanya setelah dia setuju." Atau "Saya akan melihat kontrak ini hanya setelah pemodal." Meskipun, menurut statistik dan akal sehat, pernyataan seperti itu tidak dibenarkan, dan hanya cara untuk mengalihkan tanggung jawab.

Hal utama di sini adalah tidak perlu khawatir, dan tidak menangani semuanya sekaligus. Cobalah untuk memilih mode asinkron terlebih dahulu satu cabang koordinasi. Mungkin perlu untuk merevisi tugas, parameter koordinasi - sehingga dapat menghilangkan saling ketergantungan.

Misalnya, biarkan departemen keuangan, yang berdiri dalam rantai persetujuan kontrak, hanya melihat ketentuan pembayaran. Biarkan dia memiliki kriteria penilaiannya sendiri yang jelas. Lebih baik jika mereka diformalkan dalam bentuk model kontrak - misalnya, 100% pascabayar untuk pemasok, 100% pembayaran di muka untuk pembeli. Dalam hal ini, kontrak yang memenuhi kriteria akan terpeleset sekaligus. Dan pemodal tidak akan memiliki alasan untuk menunggu penilaian dari pengacara yang sama.

Satu-satunya hal yang penting: proses asinkron sangat sulit diterapkan tanpa otomatisasi. Jika proses, eksekusi dan pelacakan mereka diimplementasikan hanya di atas kertas, maka menambahkan cabang paralel akan mengubahnya menjadi kekacauan. Perlu otomatisasi.

Prinsip "Tugas Otomatis" paling cocok untuk otomasi tersebut. Meskipun, Anda bisa bertahan dengan cara standar proses menggambar yang ada di platform modern, Anda hanya perlu bermain-main.

"Gambar" proses standar akan mengharuskan Anda mengidentifikasi keseluruhan proses, semua cabang, dan hubungan. Jika prosesnya rumit dan panjang, maka Anda akan menemui masalah - lebarnya tidak akan pas di layar. Jika Anda belajar di institut sebagai programmer, maka ingatlah aturan ini untuk merancang algoritma: tidak lebih dari tiga cabang vertikal paralel. Aturannya tidak hanya ditemukan - jika ada lebih banyak cabang, itu akan menjadi masalah untuk memahami skema algoritma.

Tugas-otomatis menghilangkan masalah ini - karena tidak ada gambar proses sama sekali, karena tidak ada entitas seperti itu - suatu proses. Ada tugas. Jika Anda benar-benar ingin, Anda dapat mengumpulkan proses dari mereka. Tapi tidak sebaliknya. Semacam metode deduktif dari proses menggambar.

Selain asinkron, ada metode optimasi yang lebih kuat - proses buffering. Tentang dia - lain kali.

Source: https://habr.com/ru/post/id453192/


All Articles