Ich verbrachte viel Zeit zu untersuchen, warum Multithreaded libcurl Anwendung unter Linux abstürzt. Ich habe in Foren gesehen, dass ich CURLOPT_NOSIGNAL
verwenden muss, um dieses Problem zu umgehen. Ok, keine Probleme, aber gibt es irgendwelche Informationen, welche Nebenwirkungen kann es erzeugen? Wenn CURLOPT_NOSIGNAL = 0
fehlerhaft ist, warum benötigt libcurl diese Option überhaupt, wenn sogar mobile Geräte Multicore-Prozessoren haben, und deshalb verwenden viele Anwendungen mehrere Threads, um diese Hardware-Multitasking-Unterstützung zu nutzen?Warum libcurl `CURLOPT_NOSIGNAL`-Option benötigt und was sind die Nebenwirkungen, wenn es aktiviert ist?
Antwort
Standardmäßig verwendet die DNS-Auflösung Signale zur Implementierung der Timeout-Logik, aber dies ist nicht Thread-sicher: Das Signal könnte auf einem anderen Thread als dem ursprünglichen Thread ausgeführt werden, der es gestartet hat.
Wenn libcurl nicht mit async DNS-Unterstützung (was Threaded Resolver oder c-ares bedeutet) erstellt werden, müssen Sie die Option CURLOPT_NOSIGNAL
in Ihrer Multithread-Anwendung auf 1 setzen.
können Sie weitere Details zu diesem Thema hier im Zusammenhang finden: an allen heutzutage
- http://curl.haxx.se/libcurl/c/libcurl-tutorial.html#Multi-threading
- http://www.redhat.com/archives/libvir-list/2012-September/msg01960.html
- http://curl.haxx.se/mail/lib-2013-03/0086.html
Warum Libcurl Bedürfnisse diese Option?
Hauptsächlich aus Legacy-Gründen, aber auch, weil nicht alle Anwendungen libcurl in einem Multithread-Kontext verwenden.
Dies ist immer noch etwas, das aktiv diskutiert wird. Sehen Sie diese recent discussion:
Libcurl hat keine Threads auf sein eigenes, dass sie schützen muss und es nicht weiß, was Thread-Bibliothek/Konzept, das Sie so es verwenden kann nicht auf seinen eigenen Satz die Rückrufe. Dies war das Thema für die Diskussion vor und es gibt in der Tat gültige Gründe zu überdenken, was wir tun können und sollten, aber das ist, wie Dinge seit seit immer und immer noch sind. [...] aber ich bin immer offen für weitere Diskussionen!
- 1. Was sind die Nebenwirkungen von EmptyWorkingSet?
- 2. Was sind die Nebenwirkungen der LINT-Inspektion?
- 3. Was sind die Nebenwirkungen des Flags IMAGE_FILE_LARGE_ADDRESS_AWARE?
- 4. Kontrollkästchenfarbe ändern, wenn diese Option aktiviert ist?
- 5. Was sind Nebenwirkungen in der funktionalen Programmierung?
- 6. Was sind die Unterschiede zwischen Entweder und Option?
- 7. Was ist indirekte Objektnotation, warum ist es schlecht und wie vermeidet man es?
- 8. Ionic2. Ion-Option aktiviert ist visuell nicht
- 9. Was sind die Nebenwirkungen der Verwendung von "ungültigen" Attributen auf einem ASP-Steuerelement?
- 10. Was ist nicht aktiviert und wie überprüfe ich es?
- 11. Testen, wenn JavaScript aktiviert ist
- 12. Was ist die "Neustart" -Option von Robocopy?
- 13. Warum benötigt Ruby FFI attach_function Aufrufe, wenn Headerdateien vorhanden sind?
- 14. Holen Sie die Länge eines leeren oder nicht gesetzten Arrays, wenn die Option "nounset" aktiviert ist
- 15. Was ist Boxen und Unboxing und was sind die Kompromisse?
- 16. Was ist "String Bashing" und warum ist es schlecht?
- 17. Was ist LiteralControl? Warum wird es benutzt?
- 18. Ändern Sie die Option mit Kontrollkästchen aktiviert und jQuery
- 19. Was ist der Zweck von "::" und warum ist es nützlich?
- 20. Was ist Service Discovery und warum brauchen Sie es?
- 21. Was ist die Option/FD zu cl.exe
- 22. Erkennen, ob die Option "Großer Text" unter Android aktiviert ist
- 23. Warum benötigt ZooKeeper die Mehrheit?
- 24. Was ist die Option ffreestanding in gcc?
- 25. Warum sind Enable-Migrations nicht aktiviert?
- 26. Was genau macht `-rdynamic` und wann genau wird es benötigt?
- 27. Was sind die Tomcat-Komponenten? Was ist Catalina und Kojote?
- 28. Was sind die Regeln für benannte Argumente und warum?
- 29. SwingUtilities.invokeLater() warum wird es benötigt?
- 30. Zeigen div1 wenn Radio1 aktiviert ist und div2 wenn Radio2 aktiviert ist