Tôi không thể tìm thấy một nguồn toàn diện có thể giải thích khái niệm một cách rõ ràng. Sự hiểu biết của tôi là một sợi được đưa ra một số đoạn bộ nhớ trong eden, nơi nó phân bổ các đối tượng mới. Một chủ đề cạnh tranh sẽ kết thúc có một đoạn hơi liên tục của eden. Điều gì sẽ xảy ra nếu luồng đầu tiên chạy ra khỏi khu vực miễn phí trong TLAB của nó? Nó sẽ yêu cầu một đoạn mới của eden?TLAB (Bộ đệm phân bổ địa phương chủ đề) là gì?
Trả lời
Ý tưởng về TLAB là giảm nhu cầu đồng bộ hóa giữa các chuỗi. Sử dụng TLABs, nhu cầu này được giảm khi bất kỳ luồng nào có một vùng mà nó có thể sử dụng và mong đợi rằng nó là luồng chỉ sử dụng vùng này. Giả sử rằng một TLAB có thể chứa 100 đối tượng, một luồng chỉ cần có một khóa để yêu cầu thêm bộ nhớ khi phân bổ đối tượng 101. Nếu không có TLAB, điều này sẽ được yêu cầu cho mọi đối tượng. Nhược điểm của khóa học là bạn có khả năng lãng phí không gian.
Các đối tượng lớn thường được phân bổ bên ngoài TLAB vì chúng làm mất hiệu lực của việc giảm tần suất cấp phát bộ nhớ đồng bộ. Một số đối tượng có thể thậm chí không vừa với một TLAB.
Bạn có thể đặt kích thước của TLAB bằng cờ -XX:TLABSize
nhưng nói chung tôi không khuyên bạn nên gây rối với các cài đặt này trừ khi bạn thực sự phát hiện ra sự cố mà bạn có thể giải quyết.
Cảm ơn. 1) Khi một thread phân bổ một TLAB nó vẫn phải có được một khóa để một thread cạnh tranh sẽ không phân bổ một TLAB tại cùng một khu vực mà thread đầu tiên đã làm. Giả định đó có đúng không? 2) Việc phân bổ một đối tượng bên ngoài TLAB luôn đắt tiền vì phải có khóa để phân bổ mỗi đối tượng mới không phù hợp với TLAB? – user1745356
Hãy suy nghĩ về chủ đề 1 tuyên bố một TLABfrom bù đắp 0 đến 99 và thread 2 tuyên bố một từ offsets 100-199. Hợp đồng nói rằng một khi tuyên bố, thread 2 không thể phân bổ trong 0-99 và thread 1 không thể phân bổ trong 100-199. Không có luồng nào có thể yêu cầu không gian này làm bộ đệm phân bổ tương lai của nó. Bằng cách này, mỗi thread có thể phân bổ 100 đối tượng mà không cần đồng bộ hóa nếu mỗi đối tượng có một trong các khe giả định. Phân bổ bên ngoài một TLAB không phải là rất tốn kém nhưng nó rõ ràng là đắt hơn trong một TLAB vì nó đòi hỏi phải giao tiếp với các chủ đề khác mà có thể chạy concurrenctly. –
Xin lỗi, nếu câu hỏi của tôi không rõ ràng, tôi sẽ cố gắng đặt nó theo một cách khác - nếu hai chủ đề cạnh tranh muốn cấp phát bộ nhớ cho 100 đối tượng tiếp theo và địa chỉ bộ nhớ sẵn có tiếp theo bắt đầu ở 100 thì người đầu tiên mua lại khóa sẽ nhận địa chỉ từ 100 đến 199 và chuỗi thứ hai sẽ nhận được 200 - 299. Đây có phải là chính xác không? – user1745356
- 1. Phân bổ trong TLAB mới so với phân bổ bên ngoài TLAB
- 2. Chủ đề địa phương
- 3. Phân bổ bộ đệm DMA lớn
- 4. Phân bổ và phân bổ bộ nhớ qua các chủ đề
- 5. C++ vấn đề phân bổ bộ nhớ
- 6. Phân bổ bộ nhớ phương thức tĩnh
- 7. Phân bổ bộ nhớ được sắp xếp là gì?
- 8. Chủ đề là gì (Chủ đề là gì)?
- 9. "Bộ nhớ đệm" là gì?
- 10. Chủ đề an toàn biến địa phương
- 11. Phân bổ heap theo chủ đề cụ thể
- 12. Cloud9 IDE chủ đề địa phương
- 13. phân bổ lười biếng là gì?
- 14. Vấn đề phân bổ bộ nhớ Haskell FFI
- 15. Độ phân bổ bộ nhớ cấp chủ đề trên nền tảng được nhúng
- 16. "Bộ đệm" trong VIM là gì?
- 17. Kích thước tối đa của bộ đệm Node.js là gì
- 18. Phân bổ bộ nhớ lắp ráp
- 19. Đề án phân bổ Malloc
- 20. an toàn Chủ đề và các biến địa phương
- 21. Trình phân bổ bộ nhớ C tốt cho hệ thống nhúng là gì?
- 22. Tiêu đề máy chủ http là gì?
- 23. Về vấn đề ngày ở địa phương và máy chủ
- 24. Địa phương vô hiệu hóa đệm
- 25. Phân bổ, đệm và căn chỉnh ngăn xếp
- 26. Phân bổ bộ nhớ CLR của máy chủ SQL
- 27. bộ đệm cửa hàng là gì?
- 28. * (int *) (bộ đệm) nghĩa là gì?
- 29. Sử dụng bộ đệm tròn là gì?
- 30. Việc xả bộ đệm nghĩa là gì?
Về câu hỏi cuối cùng của bạn, tôi đoán rằng TLAB mới được phân bổ cho chuỗi. Hãy suy nghĩ về việc phân bổ TLAB thay vì các mẩu bộ nhớ nhỏ như một sự tối ưu hóa đơn giản làm cho luồng công việc thường xuyên cục bộ thay vì yêu cầu khóa. – maaartinus