Tôi nghĩ rằng vấn đề "bản địa" bạn đang nói về không liên quan đến cách TThread
được thực hiện, nhưng đến các khía cạnh khác của RTL:
- Người quản lý bộ nhớ rất nhanh và cũng bằng văn bản, nhưng nó không thể mở rộng theo cách tuyến tính khi chạy với một số luồng đồng thời trên nhiều lõi;
- loại tham khảo-tính (như
string
và mảng động) được thực hiện với một opcode asm lock
có nguyên tử tham khảo đếm (InterlockedDecrement/InterlockedIncrement trong x64), mà cũng có thể mở rộng quy mô nặng trên các ứng dụng đa luồng (có nghĩa là, tất cả các lõi bị đóng băng khi opcode này được thực hiện - ngay cả khi các CPU mới hơn thực hiện tiến trình về việc này, việc thực hiện RCU có thể mở rộng tốt hơn).
Điểm yếu này phổ biến đối với tất cả thư viện nhiều chủ đề - thậm chí OTL sẽ bị khoảng this. Chúng tồn tại kể từ phiên bản Delphi rất sớm, và vẫn còn đó với Delphi XE2. Việc thực hiện 64 bit là tương tự (thậm chí chậm hơn), và nền tảng Mac OS chia sẻ việc thực hiện rất giống nhau.
Vui lòng xem this other SO question về cách viết các ứng dụng đa luồng trong Delphi.
Thành thật mà nói, cả hai điểm trên sẽ chỉ xuất hiện trên một số loại ứng dụng rất cụ thể.
Vì vậy, không có gì phải lo lắng về đa luồng trong Delphi, nếu bạn biết những điểm đó, và không lạm dụng các cuộc gọi quản lý bộ nhớ hoặc quá trình chuỗi trong chủ đề của bạn.
Nguồn
2011-10-11 13:58:39
Tôi nhớ một trong những tính năng mới: dưới Delphi XE bạn có thể đặt tên cho một chủ đề. Mát mẻ. Co nhung nguoi khac? – Ampere
'TThread.NameThreadForDebugging' tồn tại trong D2010. Tôi không tin rằng có bất kỳ vấn đề nghiêm trọng với mã luồng mà tàu với Delphi. Các thư viện phổ biến nhất và luồng tốt nhất là [OmniThreadLibrary] (http://otl.17slon.com/) nhưng @gabr là quá khiêm tốn để nói như vậy. –
Delphi không có "vấn đề bản địa" với cách nó thực hiện luồng. Tôi đã sử dụng các lớp học dựa trên TThread từ năm 2003 mà không có bất kỳ phức tạp thực sự. Tuy nhiên, bạn không muốn bắt đầu với một khuôn khổ luồng bên thứ ba hiện có để tiết kiệm cho mình những rắc rối. – Misha