Erlang NIFs'deki thread'lerle ilgili küçük bir sorunum var. Kodumu buradan görüntüleyebilirsiniz: http://pastebin.com/HMCj24Jp. Sorun şu ki, iş parçacığı başlatırken bazı argümanlar alır ve generate_binary işlevini başlatır. Bu tamam, ama her şeyi çökerten argümanları okumaya çalışırken. Bu belki de en karmaşık problem değil, fakat bu konuda herhangi bir belge bulamadım, bu yüzden bazılarınızın cevabı bilmesini umuyorum.Erlang NIF ve thread ile ilgili sorunlar
cevap
Sizin generate_buffer()
NIF, generate_binary()
numaralı telefonu aramak için bir konu oluşturmaktan gurur duyar, ancak çağıran NIF yeni oluşturulan içeriğin bitirilmesini beklememektedir. Sadece iş parçacığı genel olarak olduğu gibi, iş parçacığı oluşturulur ve muhtemelen NIF döndürdüğü zaman çalışır. Muhtemelen generate_binary()
, generate_buffer()
geri döndükten sonra, kötü şeyi korkunç bir şekilde karıştırdıktan sonra, Erlang run-time sistemine çağırmaya çalıştığı için, Erlang BEAM emülatörünü çökertiyorsunuz.
Şimdi, istediğiniz şeyi yapmak için bunu düzelttiğiniz varsayılsa bile, burada açık yerel iş parçacıklarını kullanmanız gerektiğini düşünmüyorum. İlk olarak, Erlang NIF'lerinin, yalnızca farklı bir dilde yazılmalarıyla farklılık gösteren, düzenli Erlang fonksiyonları gibi görünmeleri gerekiyor. Erlang işlevleri, ayrı bir yürütme iş parçacığı üretmez, ardından geri dönüp, bu iş parçacığı çalışır durumda bırakmaz. I/O ve kalıcı veri depolama ile ilgilenenler hariç, Erlang fonksiyonları deterministik ve referentially transparent. NIF'iniz de değil. Yani, işe yaramasa bile, deneyimli bir Erlang programcısının beklentilerini ihlal ettiği için hala "yanlış".
İkincisi, çok işlemeye ihtiyacınız varsa, Erlang zaten süreçler hakkında fikir verir. NIF'iniz çok işlemciden faydalanabileceği kadar çok iş yaparsa, NIF'inizi yeniden işlemeyin, bu nedenle verilerin bir alt kümesi üzerinde çalışabilir, sonra birkaç kez Erlang işlemlerinin her biri için bir defaya mahsus olarak söyleyin. O zaman açık yerel konulara ihtiyacınız yoktur; BEAM emülatörü, sizin için en uygun iplik sayısını, şeffaf olarak yaratacaktır.
Üçüncü olarak, iş parçacığının ömrü yalnızca gerçekte amaçlanmış göründüğü gibi tek bir Erlang NIF çağrısı sırasında genişlerse, iş parçacığı oluşturma yükü performansı düşecek. Bu, Erlang süreçlerinin burada daha verimli olacağının bir başka nedenidir.
- 1. Mesaj dizilerim ile ilgili sorunlar
- 2. FragmentPagerAdapter ile ilgili sorunlar
- 3. UITableView ile ilgili sorunlar
- 4. ile ilgili sorunlar Pdf dosyası indirme ile ilgili sorunlar R
- 5. Kereviz ile ilgili sorunlar
- 6. ile ilgili sorunlar .replace()
- 7. makefile ile ilgili sorunlar '%'
- 8. javascript/window.confirm işleviyle ilgili sorunlar
- 9. AdapterView ve addView ile ilgili Sorunlar
- 10. İptal Düğmesi ve UIActionSheet ile İlgili Sorunlar
- 11. Paketler, modüller ve işlevler ile ilgili sorunlar
- 12. HttpWebRequest/HttpWebResponse ile ilgili sorunlar ve kurabiyeler
- 13. FFI Racket ve Chipmunk ile İlgili Sorunlar
- 14. JOGL ve Swing ile ilgili sorunlar
- 15. Cin'in ve cout'un işlevleri ile ilgili sorunlar
- 16. selectize.js ve ajax ile ilgili sorunlar
- 17. GKLocalPlayer ve saveGameData ile ilgili sorunlar
- 18. ltk (ortak lisp) ile ilgili sorunlar
- 19. Büyük QImage ile ilgili sorunlar
- 20. BufferedReader/PrintWriter ile ilgili sorunlar?
- 21. can_upload flag ile ilgili sorunlar
- 22. MediaPlayer'ı durdurma ile ilgili sorunlar
- 23. goLang bağımlılıkları ile ilgili sorunlar
- 24. ASP.NET'te TransactionScope ile ilgili sorunlar
- 25. Yönlendirici Vertx ile ilgili sorunlar
- 26. Büyütme API'sı ile İlgili Sorunlar
- 27. Bellek sızıntısı ile ilgili sorunlar
- 28. bind_rows() ile ilgili sorunlar dplyr
- 29. C# Task.ContinueWith ile ilgili sorunlar
- 30. C# bölümü ile ilgili sorunlar #