네이티브 멀티 스레딩을 지원하는 언어 (또는 지원하지 않는 언어)가 궁금하고 구현에 대한 세부 정보를 얻을 수 있습니다. 바라건대 우리는이 특정 기능의 전체 개요를 생성 할 수 있기를 바랍니다.멀티 스레딩을 지원하는 고급 언어는 무엇입니까?
답변
C 및 C++의 이전 버전 (즉, C89, C99, C++ 98 및 C++ 03)은 POSIX 스레드와 같은 라이브러리가 거의 모든 언어에서 지원되지만 핵심 언어에서는 전혀 지원되지 않습니다. 플랫폼을 제공합니다.
C 및 C++, C11 및 C++ 11의 최신 버전에는 언어에 내장 된 스레딩 지원이 있지만 C11의 선택적 기능이므로 단일 코어 내장 시스템과 같은 구현에서는 원하는 경우 C11의 나머지 부분을 지원하면서 지원할 수 있습니다.
더 이상 C++ 11에서는 그렇지 않습니다. –
@MaxBeikirch : 감사합니다. 5.5 년 전이 답변이 처음 작성되었을 때 C++ 11이 존재하기 전에 사실이었습니다. :). –
절대 :) 지금 당신의 대답은 정확하고 upvote 수 있습니다;) –
공식적인 squeak VM은 네이티브 (OS) 스레드를 지원하지 않지만 Gemstone 버전은 지원한다고 생각합니다.
(정확하지 않은 경우 자유롭게 편집하십시오.)
이 컨텍스트에서 "native"를 정의해야합니다.
Java는 일종의 내장 된 멀티 스레딩을 주장하지만, 거친 잠금 및 라이브러리 지원을 기반으로합니다. 현재 POSIX 스레드를 사용하는 C보다 '고유'하지 않습니다. 다음 버전의 C++ (0x)에는 스레딩 라이브러리도 포함됩니다.
나는 자바와 C# 지원 멀티 스레딩을 알고 C++의 다음 버전이 직접 지원하는 것을 ...
C# 멀티 스레딩 API는 바보입니다. 그것을 할 수있는 방법은 세 가지가 있으며, 그 중 "모두가있다"는 것은 아닙니다. 스레드에서 결과가 필요하지 않으면 간단한 방법으로 작동합니다. 결과를 얻는 방법은 훨씬 복잡하고 개념적으로 다릅니다 (API 이름은 기억이 안납니다. 미안합니다). – akauppi
Perl 및 Python (계획된 구현합니다 ... boost.org 라이브러리의 일부로 사용할 수 있습니다) 해야 할 것. Ruby가 작업하고 있지만 Ruby 1.8의 스레드는 실제로 쓰레드가 아닙니다.
JRuby 또는 Ruby.NET 또는 IronRuby의 스레드가 "실제 스레드가 아닌"스레드가 무엇인지 "실제로 스레드"가 무엇인지 정의 할 수 있습니까? 이러한 모든 Ruby 1.8 구현은 전역 잠금 (Global Lock)없이 진정으로 동시적이고 병렬 인 네이티브 OS 스레드를 구현합니다. 스레드에서 뭘 더 원합니까? –
JRuby, XRuby 또는 Ruby.net 용입니다. 대부분의 사람들이 사용하는 루비가 아닙니다. –
Boost::thread 위대하다. 나는 언어의 일부를 말할 수 있는지 잘 모르겠다. CRT/STL/Boost가 C++의 '일부'또는 선택적 부가 기능 라이브러리로 간주되는지 여부에 따라 다릅니다.
(그렇지 않으면 OS의 모든 기능이기 때문에 실제로는 언어에 원시 스레딩이 없습니다.)
CPython의 경우 GIL에 대해 기억해야합니다. 요약하면 : 멀티 프로세서 컴퓨터에서도 하나의 프로세서 만 사용됩니다. 코멘트가 보여주는 것처럼 여러 가지 방법이 있습니다.
사실이 아닙니다. XRuby, Ruby.NET, JRuby, IronRuby, Jython, IronPython 및 기타 여러 가지 기능을 갖춘 진정한 병렬 스레드를 지원하는 Ruby 및 Python의 여러 구현이 있습니다. –
나의 초기, 너무 일반적인 진술을 수정했습니다. –
Erlang에는 concurrent programming에 대한 지원이 내장되어 있습니다.
엄밀히 말하면, 얼랭 처리자는 미성년자입니다. 그러나 언어와 가상 머신은 처음부터 동시성을 지원하도록 설계되었습니다. 이 언어에는 비동기 프로세스 간 메시징을위한 특정 제어 구조가 있습니다.
파이썬에서 greenlet은 경량 스레드와 채널 기반 메시징을 제공하는 타사 패키지입니다. 그러나 Erlang과 비교할 수는 없습니다.
또한 Delphi/FreePascal은 스레드를 지원합니다.
다른 답변을 통해 Windows 플랫폼에서만 사용한다고 가정합니다.
TThread 개체의 상단에 더 나은 기능을 구현 어떤 좋은 도서관
는 :나는 Haskell보다 높은 수준입니다 언어 목록이 있다고 가정 꽤 짧고, concurrency and parallelism에 대한 지원이 꽤 있습니다.
이 질문은 의미가 없습니다. 특정 구현이 원시 스레드 또는 녹색 스레드로 스레드를 구현하도록 선택하는지 여부는 언어와 관련이 없습니다. 즉 내부 구현 세부 사항입니다.
녹색 스레드를 사용하는 원시 스레드와 Java 구현을 사용하는 Java 구현이 있습니다.
원시 스레드를 사용하는 Ruby 구현과 녹색 스레드를 사용하는 Ruby 구현이 있습니다.
녹색 스레드를 사용하는 원시 스레드와 Python 구현을 사용하는 Python 구현이 있습니다.
녹색 스레드를 사용하는 POSIX 스레드 구현도 있습니다. 오래된 LinuxThreads 라이브러리 또는 GNU pth 라이브러리.
구현이 원시 스레드를 사용한다고해서 실제로 이러한 스레드가 병렬로 실행될 수 있다는 의미는 아닙니다. 많은 구현에서는 Global Interpreter Lock을 사용하여 한 번에 하나의 스레드 만 실행할 수 있습니다. 한편, 녹색 스레드를 사용한다고해서 병렬로 실행할 수 없다는 의미는 아닙니다. 예를 들어 BEAM Erlang VM은 여러 개의 CPU 코어에서 녹색 스레드 (더 정확하게는 녹색 프로세스)를 예약 할 수 있으며 Rubinius Ruby VM.
Perl은 원시 스레드를 유용하게 지원하지 않습니다.
예, Perl 스레드 모듈이 있고 네 구현에 기본 플랫폼 스레드를 사용합니다. 문제는 일반적인 경우에는별로 유용하지 않다는 것입니다.
Perl 스레드를 사용하여 새 스레드를 만들면 Perl 인터프리터의 전체 상태를 복사합니다. 이것은 매우 느리며 많은 RAM을 사용합니다. 사실 유닉스에서 fork()를 사용하는 것보다 느리다. 후자는 copy-on-write를 사용하고 Perl 쓰레드는 쓰기를 사용하지 않기 때문이다.
그러나 일반적으로 각 언어마다 고유 한 스레딩 모델이 있으며 일부는 다른 것과 다릅니다. 파이썬 (주로)은 네이티브 플랫폼 스레드를 사용하지만 한 번에 하나만 실행되도록 (파이썬 코드) 큰 잠금 장치가 있습니다. 이것은 실제로 몇 가지 장점이 있습니다.
요즘 스레드가 프로세스에 유리하지 않습니까? (구글 크롬, IE8을 생각해 보라)
나는 최근 루아를 위해 Lua Lanes라고 불리는 멀티 쓰레딩 확장을했다. 그것은 다중 스레딩 개념을 자연스럽게 언어에 병합합니다. 멀티 스레딩이 더 나은 것은 아닙니다.
기록을 위해 Lua에 내장 된 협업 멀티 스레딩 (coroutines)을 종종 사용할 수도 있습니다. 차선 유무.
레인에는 GIL이없고 스레드별로 별도의 Lua 유니버스에서 코드가 실행됩니다. 따라서 C 라이브러리가 중단되지 않으면 스레드 사용과 관련된 문제가 발생하지 않습니다.실제로이 개념은 프로세스 및 메시지 전달과 비슷하지만 단 하나의 OS 프로세스 만 사용됩니다.
최근에는 Lua (짧은 스크립팅 같은 코드)의 이점을 제공하지만 유형 안전성 (큰 코드베이스의 경우 필수)을 제공하는 스칼라로 전환했습니다. 스칼라의 액터 모델은 하나의 API로 협동 조합 (원시 루아 에서처럼)과 OS 스레드 기반 멀티 스레딩을 멋지게 결합합니다. – akauppi
Clojure은 병행 성을 효과적으로 처리 할 수 있도록 특별히 설계된 JVM의 위와 같은 Lisp 방언입니다.
다양한 기능을 수행 할 수있는 다양한 API ()와 다양한 에이전트 시스템 (Scala의 액터와 Erlang의 프로세스)이 있습니다. 심지어 소프트웨어 트랜잭션 메모리도 있습니다.
모두 Clojure는 올바른 다중 스레드 및 동시 코드를 작성할 수 있도록 도와줍니다.
- 1. PHP5는 멀티 스레딩을 지원합니까?
- 2. DBCP - 멀티 스레딩을 지원합니까?
- 3. Webservice에서 멀티 스레딩을 지원합니까?
- 4. 스프링 배치에서 멀티 스레딩을 설정하는 방법은 무엇입니까?
- 5. .net에서 멀티 스레딩을 구현하는 다른 방법은 무엇입니까
- 6. SQL Server에서 멀티 스레딩을 선택하는 방법은 무엇입니까?
- 7. 멀티 스레딩을 사용하여 합계 계산
- 8. Java에서 멀티 스레딩을 어떻게 처리해야합니까?
- 9. VB.NET은 자체적으로 멀티 스레딩을 수행합니까?
- 10. 멀티 미디어 리모컨에 사용되는 프로그래밍 언어는 무엇입니까?
- 11. C# 멀티 스레딩을 사용하여 파일을 처리하는 방법
- 12. Azure에서 멀티 스레딩을 수행하는 올바른 방법
- 13. .net을 사용하여 멀티 스레딩을 배우기에 좋은 소스입니까?
- 14. opengles에서 멀티 스레딩을 사용하여 화면 렌더링
- 15. Python 멀티 스레딩을 통한 성능 향상 방법
- 16. backpropagation 신경망 교육에 멀티 스레딩을 적용하려면 어떻게해야합니까?
- 17. SQL Server CE는 멀티 스레딩을 지원합니까?
- 18. iPhone 시뮬레이터에서 지원하는 국제 언어는 몇 개입니까?
- 19. 내 코드가 멀티 스레딩을 사용하는 데 필요한 이야기의 징조는 무엇입니까?
- 20. long (64 비트) 정수를 지원하는 스크립트 언어는 무엇입니까?
- 21. 런타임 클래스 작성을 지원하는 프레임 워크/언어는 무엇입니까?
- 22. WPF 내장 내장 철자 검사가 지원하는 정확한 언어는 무엇입니까?
- 23. LDAP를 지원하는 고급 CMS 권장 사항
- 24. 고급 프로그래밍 언어는 객체 지향적 인 반면 저수준 언어는 절차 지향적 인 경향이 있습니까?
- 25. 스칼라 외에 JVM에서 실행되는 대체 멀티 스레딩 최적화 언어는 무엇입니까?
- 26. OpenMP 멀티 스레딩을 사용하는 Stl 컨테이너 벡터 push_back
- 27. 시뮬레이션을 위해 잘 작동하는 프로그래밍 언어는 무엇입니까?
- 28. 멀티 코어를 지원하는 가장 작은 Linux 배포판입니까?
- 29. 멀티 스레드 프로그램을 지원하는 C++ 0X 표준
- 30. 멀티 쓰레딩을 더 잘 지원하는 .NET ORM?
이것은 언어 문제가 아니며 구현 문제입니다. 질문이 의미가 없으므로 구현과 관련하여 읽어야한다고 제안합니다. – Marcin
나는 Marcin이 구현에 관해 읽어야하는 것에 동의한다. 이 방법으로 요청한 이유는 대부분의 언어가 구현간에 병렬화하는 기능을 공유한다고 가정했기 때문입니다. 예를 들어 C 및 C++에는 사용하는 컴파일러에 관계없이 스레드가 있습니다. – bmdhacks