[thắc mắc]-Java concurrency , Multithreading in Java - vozForums
vozForums
Go Back   vozForums > Góc học tập > Ngành CNTT > Phát triển Phần mềm
Reply
 
Thread Tools
  #1  
Old 10-10-2019, 09:45
manhdat107's Avatar
manhdat107 manhdat107 is online now
Đã tốn tiền
 
Join Date: 06-2014
Posts: 152
[thắc mắc]-Java concurrency , Multithreading in Java

em đang tìm hiểu về thằng Multithreading này, và bài toans là lấy dữ liệu lên (mysql, khoảng hơn 40 milion record) ... em đang tính là sử dụng Multithreading để làm việc này, mà em chưa hiểu cơ chê của nó cho lắm,
1: ví dụ như mình tạo nhiều thread như v, thì tốc độ lấy dữ liệu có nhanh hơn ko, hay là CPU sẽ châmj lại cho bị ép xử lí nhiều thread như v.
2: làm sao khi chia nhiều luồng như vậy, thì các thread sẽ chia nhau ra lấy dữ liệu , cơ chế bên trong của nó là thế nào các thím nhỉ.?
mong các cao nhân giúp đỡ và giải đáp giúp em .
Reply With Quote
  #2  
Old 10-10-2019, 10:43
phamhuythang phamhuythang is offline
Senior Member
 
Join Date: 04-2007
Posts: 387
Re: [thắc mắc]-Java concurrency , Multithreading in Java

Please read this article
https://www.baeldung.com/java-executor-service-tutorial
1. Java multithreading bây giờ ko cần thiết phải tạo từng thread, thay vào đó sử dụng Threadpool, tạo threadpool như nào thì đọc bài trên.
2. Lấy dữ liệu nhanh hơn ko ? --> cái này phụ thuộc vào cách bạn lấy dữ liệu, lấy toàn bộ trong 1 lần hay lấy phân trang... Sau khi lấy ra thì mới đến bước tạo Task cho Threadpool, giả sử rằng mỗi record sẽ có 1 Task, như vậy sẽ có 40mil task
3. Trong Multithreading, thành công lớn nhất là CPU được fullload có ích .
4. Với bài toán cụ thể là query mysql, đọc thêm ở đây để biết cơ bản về connection poll https://www.baeldung.com/java-connection-pooling

Last edited by phamhuythang; 10-10-2019 at 10:46.
Reply With Quote
  #3  
Old 10-10-2019, 11:56
manhdat107's Avatar
manhdat107 manhdat107 is online now
Đã tốn tiền
 
Join Date: 06-2014
Posts: 152
Re: [thắc mắc]-Java concurrency , Multithreading in Java

Quote:
Originally Posted by phamhuythang View Post
Please read this article
https://www.baeldung.com/java-executor-service-tutorial
1. Java multithreading bây giờ ko cần thiết phải tạo từng thread, thay vào đó sử dụng Threadpool, tạo threadpool như nào thì đọc bài trên.
2. Lấy dữ liệu nhanh hơn ko ? --> cái này phụ thuộc vào cách bạn lấy dữ liệu, lấy toàn bộ trong 1 lần hay lấy phân trang... Sau khi lấy ra thì mới đến bước tạo Task cho Threadpool, giả sử rằng mỗi record sẽ có 1 Task, như vậy sẽ có 40mil task
3. Trong Multithreading, thành công lớn nhất là CPU được fullload có ích .
4. Với bài toán cụ thể là query mysql, đọc thêm ở đây để biết cơ bản về connection poll https://www.baeldung.com/java-connection-pooling
thanks thím .
nhưng em chưa hiểu khúc này cho lắm ". Sau khi lấy ra thì mới đến bước tạo Task cho Threadpool, giả sử rằng mỗi record sẽ có 1 Task, như vậy sẽ có 40mil task" => sau khi đã có data thì tạo task làm gì thím nhỉ !? , mong thím giải đáp
Reply With Quote
  #4  
Old 10-10-2019, 13:16
phamhuythang phamhuythang is offline
Senior Member
 
Join Date: 04-2007
Posts: 387
Re: [thắc mắc]-Java concurrency , Multithreading in Java

Quote:
Originally Posted by manhdat107 View Post
thanks thím .
nhưng em chưa hiểu khúc này cho lắm ". Sau khi lấy ra thì mới đến bước tạo Task cho Threadpool, giả sử rằng mỗi record sẽ có 1 Task, như vậy sẽ có 40mil task" => sau khi đã có data thì tạo task làm gì thím nhỉ !? , mong thím giải đáp
Có thể hiểu ThreadPool là 1 dev team, bạn là PM, bạn tạo ra Task và yêu cầu dev team thực hiện hết. Còn nội bộ dev team, phân công ai làm task nào, vào lúc nào là việc của họ
Bạn có thể quyết định số lượng dev (thread) trong team theo yêu cầu lúc khởi tạo Threadpool.
Reply With Quote
  #5  
Old 12-10-2019, 02:40
zulu zulu is offline
Senior Member
 
Join Date: 11-2006
Posts: 328
Re: [thắc mắc]-Java concurrency , Multithreading in Java

Quote:
Originally Posted by manhdat107 View Post
em đang tìm hiểu về thằng Multithreading này, và bài toans là lấy dữ liệu lên (mysql, khoảng hơn 40 milion record) ... em đang tính là sử dụng Multithreading để làm việc này, mà em chưa hiểu cơ chê của nó cho lắm,
1: ví dụ như mình tạo nhiều thread như v, thì tốc độ lấy dữ liệu có nhanh hơn ko, hay là CPU sẽ châmj lại cho bị ép xử lí nhiều thread như v.
2: làm sao khi chia nhiều luồng như vậy, thì các thread sẽ chia nhau ra lấy dữ liệu , cơ chế bên trong của nó là thế nào các thím nhỉ.?
mong các cao nhân giúp đỡ và giải đáp giúp em .
1. Không phải cứ nhiều thread là xử lý sẽ nhanh hơn. Nó phụ thuộc khá lớn vô:
+ Số core số luồng của kiến trúc CPU.
+ Tạo ra nhiều thread để tận dụng tối đa các lúc CPU rảnh ( lúc chờ các tác vụ IO). Nên còn căn cứ công việc cần xử lý hướng IO hay CPU.
Nên số thread tạo ra thường người ta sẽ có 1 con số nhất định sau khi họ thử và cân nhắc 2 yếu tố trên.

2. Cơ chế đồng bộ nó xài là Shared Memory/Object.
Reply With Quote
  #6  
Old 12-10-2019, 03:12
Nipin Nipin is offline
Senior Member
 
Join Date: 03-2018
Posts: 1,200
Re: [thắc mắc]-Java concurrency , Multithreading in Java

đéo thấy ai nói chuyện bottleneck ở đây là mysql chứ đếch phải java nhỉ =))))

1M threads java (đéo có khả năng) mà mysql connections chỉ có 15 thì vẫn ngồi đợi 15 thằng này giải quyết nhé )

Lại nói không phải cứ mở nhiều connections là ngon, connection nó còn warm up chán, lại thêm còn dính vụ lock row hay lock table, index engine có chấp nhận concurrent hay không...

Tốt nhất bạn nên tìm hiểu về sql, học về transaction, bulk insert... chứ chăm chăm vào java không có tác dụng gì đâu :(
Reply With Quote
  #7  
Old 12-10-2019, 11:41
V0Zsupport's Avatar
V0Zsupport V0Zsupport is online now
Senior Member
 
Join Date: 08-2009
Location: Google adsense
Posts: 874
Re: [thắc mắc]-Java concurrency , Multithreading in Java

threadpool ở đây ví dụ bạn tạo ra pool có 40 thread thì khi bạn submit 400 task thì nó chỉ chạy đồng thời 40 task còn 360 task còn lại sẽ vào queue khi nào 40 task kia xong thì nó móc queue ra chạy tiếp . mà vấn đề ở đây là db thôi chứ code để chạy nó dễ lắm

via vozForums for iPhone
Reply With Quote
  #8  
Old 12-10-2019, 13:11
manhdat107's Avatar
manhdat107 manhdat107 is online now
Đã tốn tiền
 
Join Date: 06-2014
Posts: 152
Re: [thắc mắc]-Java concurrency , Multithreading in Java

Quote:
Originally Posted by Nipin View Post
đéo thấy ai nói chuyện bottleneck ở đây là mysql chứ đếch phải java nhỉ =))))

1M threads java (đéo có khả năng) mà mysql connections chỉ có 15 thì vẫn ngồi đợi 15 thằng này giải quyết nhé )

Lại nói không phải cứ mở nhiều connections là ngon, connection nó còn warm up chán, lại thêm còn dính vụ lock row hay lock table, index engine có chấp nhận concurrent hay không...

Tốt nhất bạn nên tìm hiểu về sql, học về transaction, bulk insert... chứ chăm chăm vào java không có tác dụng gì đâu :(
tks thím, e mới vào công ty, và dữ liêuj của nó không biết từ đời tám hoánh nào, nên càng ngày nó càng phiinhf to ra, quá trinh search nó take time quá, nên e đang tìm cách optimize lại(khúc lấy dữ liệu từ db - và nó đíu có theo 1 chuẩn khỉ gì) ... nên em chỉ đang cân nhắc vụ mở nhiều luông thôi . lính mới nên các thím chỉ giáo thêm

Quote:
Originally Posted by V0Zsupport View Post
threadpool ở đây ví dụ bạn tạo ra pool có 40 thread thì khi bạn submit 400 task thì nó chỉ chạy đồng thời 40 task còn 360 task còn lại sẽ vào queue khi nào 40 task kia xong thì nó móc queue ra chạy tiếp . mà vấn đề ở đây là db thôi chứ code để chạy nó dễ lắm

via vozForums for iPhone
vâng bác, em có tìm hiểu sơ mà có hiểu về thằng pool này rồi ... mà quả db nó phinhf to quá rồi , mà dữ liệu em đíu biết mấy thằng tàu nó làm kiểu gì, tạo búa lua xua ... insert update tùm lum bangr, xong lúc lấy lên nó khá take time .

Last edited by manhdat107; 12-10-2019 at 13:13.
Reply With Quote
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump

All times are GMT +7. The time now is 19:31.