Tôi nhận thấy rằng đoạn mã sau sử dụng nhiều luồng và giữ cho tất cả các lõi CPU bận khoảng 100% trong khi nó đang đọc tệp.Tại sao scala.io.Source sử dụng tất cả các lõi?
scala.io.Source.fromFile("huge_file.txt").toList
và tôi giả sử sau đây là cùng
scala.io.Source.fromFile("huge_file.txt").foreach
tôi gián đoạn mã này như một thử nghiệm đơn vị dưới debugger Eclipse trên máy dev của tôi (OS X 10.9.2) và hiển thị những chủ đề: chính, ReaderThread, 3 Daemon Hệ thống Chủ đề. htop
cho thấy tất cả các chủ đề đang bận nếu tôi chạy điều này trong một bàn điều khiển scala trong một máy chủ 24 lõi (ubuntu 12).
Câu hỏi:
- Làm thế nào để hạn chế mã này về việc sử dụng số N của đề?
- Để hiểu được hiệu suất của hệ thống, bạn có thể giải thích cho tôi điều gì, tại sao và cách thực hiện điều này trong io.Source? Đọc nguồn không giúp ích gì.
- Tôi cho rằng mỗi dòng được đọc theo thứ tự; tuy nhiên, vì nó đang sử dụng nhiều chủ đề, nên chạy
foreach
trong nhiều luồng? Trình gỡ lỗi của tôi dường như cho tôi biết rằng mã vẫn chạy trong chuỗi chính.
Mọi thông tin chi tiết sẽ được đánh giá cao.
Bạn có chắc chắn bạn không thấy hoạt động thu gom rác trên tất cả các chuỗi không? –
Tôi không nghĩ như vậy là tất cả 24 lõi gần 100% khi tạo danh sách. Làm sạch đối tượng tạm thời không nên tạo tải nặng như vậy tôi tin. – user2949165
Có lẽ bạn nên đảm bảo với '-XX: + UseSerialGC'? –