Những gì tôi hiểu, Haskell có chủ đề màu xanh lá cây. Nhưng làm thế nào trọng lượng nhẹ là họ. Có thể tạo 1 triệu chủ đề không?Mất bao lâu để tạo 1 triệu chủ đề trong Haskell?
Hoặc mất bao lâu cho 100 000 chủ đề?
Những gì tôi hiểu, Haskell có chủ đề màu xanh lá cây. Nhưng làm thế nào trọng lượng nhẹ là họ. Có thể tạo 1 triệu chủ đề không?Mất bao lâu để tạo 1 triệu chủ đề trong Haskell?
Hoặc mất bao lâu cho 100 000 chủ đề?
Vâng theo here kích thước ngăn xếp mặc định là 1k, vì vậy tôi giả sử về lý thuyết có thể tạo 1.000.000 chủ đề - ngăn xếp sẽ chiếm khoảng 1Gb bộ nhớ.
từ here.
import Control.Concurrent
import Control.Monad
n = 100000
main = do
left <- newEmptyMVar
right <- foldM make left [0..n-1]
putMVar right 0 -- bang!
x <- takeMVar left -- wait for completion
print x
where
make l n = do
r <- newEmptyMVar
forkIO (thread n l r)
return r
thread :: Int -> MVar Int -> MVar Int -> IO()
thread _ l r = do
v <- takeMVar r
putMVar l $! v+1
trên máy tính xách tay không khá 2.5gh này mất ít hơn một giây.
đặt n thành 1000000 và trở nên khó viết phần còn lại của bài đăng này vì hệ điều hành đang phân trang như điên. chắc chắn sử dụng nhiều hơn một gig của ram (đã không để cho nó kết thúc). Nếu bạn có đủ RAM nó chắc chắn sẽ làm việc trong 10x thích hợp thời gian của phiên bản 100000.
Cảm ơn! làm 1000000 chủ đề trên 64bit Linux là nhanh chóng! thực 0m4.176s người dùng 0m2.833s sys 0m1.284s – Flinkman
Sử dụng benchmark đây, http://www.reddit.com/r/programming/comments/a4n7s/stackless_python_outperforms_googles_go/c0ftumi
Bạn có thể cải thiện hiệu suất trên mỗi benchmark-cơ sở bằng cách giảm kích thước thread stack với một trong đó phù hợp với chuẩn mực. Ví dụ. Chủ đề 1 triệu, với ngăn xếp 512 byte cho mỗi chuỗi, mất 2,7 giây
$ time ./A +RTS -s -k0.5k
Đối với trường hợp kiểm tra tổng hợp này, các luồng phần cứng sinh ra dẫn đến chi phí đáng kể. Làm việc chỉ với các chủ đề màu xanh lá cây trông giống như một lựa chọn ưa thích. Lưu ý rằng việc tạo ra các luồng màu xanh lá cây trong Haskell thực sự là giá rẻ. Tôi đã chạy lại chương trình trên, với n = 1m trên MacBook Pro, i7, 8GB RAM, sử dụng:
$ ghc --version
The Glorious Glasgow Haskell Compilation System, version 7.6.3
Biên soạn với -rtsopts -threaded và:
$ time ./thr
1000000
real 0m5.974s
user 0m3.748s
sys 0m2.406s
Giảm chồng giúp một chút:
$ time ./thr +RTS -k0.5k
1000000
real 0m4.804s
user 0m3.090s
sys 0m1.923s
Sau đó, biên soạn mà không -threaded:
$ time ./thr
1000000
real 0m2.861s
user 0m2.283s
sys 0m0.572s
Và cuối cùng, nếu không có -readed và với ngăn xếp giảm:
$ time ./thr +RTS -k0.5k
1000000
real 0m2.606s
user 0m2.198s
sys 0m0.404s
Điều đó phụ thuộc hoàn toàn vào phần cứng của bạn. Tại sao bạn không thử nó trên máy của bạn và cho chúng tôi biết kết quả? –
Vấn đề của tôi là tôi không biết Haskell. Tôi đã hy vọng mã Haskell. Không phải tất cả mọi người trên một máy tính xách tay 2.5Ghz những ngày này? – Flinkman