thắc mắc Concurrency, Parallel, Asynchronous, Multithreading khác nhau như thế nào?

  • Người tạo chủ đề Người tạo chủ đề o0alvin0o
  • Ngày bắt đầu Ngày bắt đầu
Hiện tại thì sài bất đồng bộ là tốt nhất, ko tốn nhiều thread, dễ lập trình, tốn ít bộ nhớ, hiệu quả ổn.
Sài threading khi ông không hiểu rõ về nó, rất dễ dính bug đa luồng, tốt nhất là sài các thread riêng biệt nhau ko nên share 1 biến chung bất kì nào cả, nhưng mọi thứ ông lập trình, đều phải đi qua hệ điều hành, nên nói về nhanh cũng chưa phải là nhanh nhất, có còn liên quan tới hệ điều hành, cấu hình phần cứng, ngôn ngữ lập trình.
Lập trình đa luồng thực sự, tận dụng toàn bộ cpu thì ông chỉ có lập trình nhúng, nơi viết code trên chính con chip chứ ko thông qua hệ điều hành.
Tóm lại nên sài bất đồng bộ, ngôn ngữ nào cũng hỗ trợ sẵn, chả cần phải tìm hiểu gì nhiều
Tào lao, bản thân async, multithread hay multiprocess đều có điểm mạnh và điểm yếu riêng nó chả có cái nào là tốt nhất cả, async chỉ phát huy được hiệu quả nếu task có nhiều I/O bound, còn task đa phần là CPU bound thì lúc đó multithread hay multiprocess sẽ được cân nhắc hơn để sử dụng.

"tốt nhất là sài các thread riêng biệt nhau ko nên share 1 biến chung bất kì nào cả, nhưng mọi thứ ông lập trình, đều phải đi qua hệ điều hành, nên nói về nhanh cũng chưa phải là nhanh nhất" -> mọi chương trình ứng dụng của ông thì cái gì chả thông qua hệ điều hành, k có nó sao cung cấp được tài nguyên (Memory, CPU, IO) cho tiến trình, hay ý ông là async k cần hệ điều hành?

"Lập trình đa luồng thực sự, tận dụng toàn bộ cpu thì ông chỉ có lập trình nhúng, nơi viết code trên chính con chip chứ ko thông qua hệ điều hành." => lại tào lao, đầy rẫy chương trình ứng dụng người ta vẫn sử dụng multithread, multiprocess hiệu quả chứ sao có mỗi nhúng.

"Lập trình đa luồng thực sự, tận dụng toàn bộ cpu thì ông chỉ có lập trình nhúng, nơi viết code trên chính con chip chứ ko thông qua hệ điều hành." => cái này còn tuỳ hệ thống nhúng nha, hệ thống nhúng phức tạp thì phải có OS, k có chuyện đè ra lập trình trên con chip đâu.
 
bI0xN5u.png
bất đồng bộ với đồng bộ thì liên quan gì đến thread nhỉ?

Nếu 2 thread không có critical section chung thì cần đồng bộ làm gì nhỉ?
 
Threading là một mô hình thực thi concurrency mà ở đó nhiều luồng thay phiên nhau thực thi các tác vụ. Một process có thể chứa nhiều thread. Python thực hiện một complicated relationship với threading thông qua GIL, nhưng ta sẽ không nói tới trong bài viết này.

Điều quan trọng cần biết về threading là nó sẽ tốt hơn cho các tác vụ có IO. Trong khi các tác vụ CPU được đặc trưng bởi các core máy tính làm việc liên tục từ đầu đến cuối, thì các tác vụ có liên quan tới IO lại bị chi phối rất nhiều vào thời gian đợi input/output để hoàn thành.
Bác cho em làm rõ 1 tí, Em có biết là trong python có GIL - chỉ cho phép một thời điểm chỉ có một thread được thực thi, nên sử dụng multithread trong python chỉ có tác dụng trong trường hợp task được thực hiện có nhiều tá vụ I/O => cái này em thấy đúng.
Điều quan trọng cần biết về threading là nó sẽ tốt hơn cho các tác vụ có IO
đoạn này theo em hiểu thì multithreading của tầng OS giúp tận dụng được CPU có nhiều core, nên các task chứa nhiều CPU vẫn phát huy tác dụng mà nhỉ. Multithread và Multiprocess đều giúp lập trình viên có thể tận dụng được CPU có nhiều core, vì bản chất thread được coi là lightweight process nên hệ điều hành hoàn toàn có thể lập lịch cho nhiều threads có thể được thực hiện cùng một lúc bới nhiều core CPU, và phần cứng (core CPU) không có khái niệm thread hay process, mà cứ hễ thanh PC (program counter) nhận địa chỉ của instruction thì nó sẽ tự động thực hiện fetch instruction về thanh IR rồi tiến hành decode instruction và execute mà thôi.

em gửi lai một số refs có nhắc về vấn đề này như sau:
Ahmet B. Simsek – Medium (https://simsekahmett.medium.com) › multithreading-vs-a...
 
Lập trình song song (parallel programming) là việc sử dụng nhiều CPU hoặc core xử lý cùng một lúc để thực hiện các tác vụ đồng thời. Mỗi CPU hoặc core sẽ giải quyết một tác vụ riêng biệt. Điều này đồng nghĩa với việc chia nhỏ tác vụ lớn thành các phần nhỏ và thực thi chúng trên các CPU hoặc core khác nhau đồng thời. Lập trình song song có thể mang lại hiệu suất cao và tăng tốc độ thực thi chương trình.

Trong khi đó, concurrency (đồng thời) là khả năng của một hệ thống hoặc chương trình để thực hiện nhiều tác vụ cùng một lúc. Vd: trong trường hợp dù chỉ có một CPU hoặc core, nhưng các tác vụ được thực hiện đồng thời thông qua chia sẻ thời gian xử lý. Hệ điều hành chuyển đổi giữa các tác vụ một cách nhanh chóng, tạo cảm giác như các tác vụ đang được thực thi đồng thời. Tuy nhiên, thực tế là CPU chỉ thực hiện một tác vụ tại một thời điểm, nhưng với tốc độ chuyển đổi nhanh giữa các tác vụ, ta có cảm giác chúng đang được thực hiện đồng thời.

Túm gọn, lập trình song song tận dụng nhiều CPU hoặc core để thực hiện các tác vụ đồng thời, trong khi concurrency cho phép thực hiện nhiều tác vụ cùng một lúc trên một CPU hoặc core thông qua chia sẻ thời gian xử lý.
 
Tào lao, bản thân async, multithread hay multiprocess đều có điểm mạnh và điểm yếu riêng nó chả có cái nào là tốt nhất cả, async chỉ phát huy được hiệu quả nếu task có nhiều I/O bound, còn task đa phần là CPU bound thì lúc đó multithread hay multiprocess sẽ được cân nhắc hơn để sử dụng.

"tốt nhất là sài các thread riêng biệt nhau ko nên share 1 biến chung bất kì nào cả, nhưng mọi thứ ông lập trình, đều phải đi qua hệ điều hành, nên nói về nhanh cũng chưa phải là nhanh nhất" -> mọi chương trình ứng dụng của ông thì cái gì chả thông qua hệ điều hành, k có nó sao cung cấp được tài nguyên (Memory, CPU, IO) cho tiến trình, hay ý ông là async k cần hệ điều hành?

"Lập trình đa luồng thực sự, tận dụng toàn bộ cpu thì ông chỉ có lập trình nhúng, nơi viết code trên chính con chip chứ ko thông qua hệ điều hành." => lại tào lao, đầy rẫy chương trình ứng dụng người ta vẫn sử dụng multithread, multiprocess hiệu quả chứ sao có mỗi nhúng.

"Lập trình đa luồng thực sự, tận dụng toàn bộ cpu thì ông chỉ có lập trình nhúng, nơi viết code trên chính con chip chứ ko thông qua hệ điều hành." => cái này còn tuỳ hệ thống nhúng nha, hệ thống nhúng phức tạp thì phải có OS, k có chuyện đè ra lập trình trên con chip đâu.
Ông học lại về kiến thức lập trình đi, mỗi hệ điều hành có 1 cách chạy khác nhau, thế nên sẽ có code chạy bên linux nhanh hơn bên windows, cũng có code chạy bên windows nhanh hơn linux, chứ ko phải cứ viết code là chạy ở nơi đâu cũng thế, và nên biết ông tạo phần mềm, thực chất cái việc ông làm là giao tiếp vs hệ điều hành, ông viết tạo 1 cái file là ông call api của hệ điều hành tạo file chứ ko phải ông làm trực tiếp với phần cứng, nên ông ko có cái quyền ưu tiên thread nào chạy trc thread nào, trừ khi hệ điều hành cấp quyền cho ông, thế nên mới nói lập trình song song thực sự chỉ khi ông lập trình nhúng, ông làm trực tiếp trên cpu đó mới là lập trình song song, ông mới kiểm soát đc tốc độ tối ưu của chương trình ông chạy, còn qua hệ điều hành là qua 1 layer rồi, hệ điều hành nó sẽ lập lịch chạy cho ông, đã ko biết về kiến thức phần cứng mà cứ to mồm.

Tôi nói rõ là chạy multithread nếu ko hiểu rõ, sẽ rất dễ dính bug, nên chạy tốt nhất là chia thành các thread riêng rẽ chạy ko share data gì cả, tối ưu tốc độ cũng như ko dính bug.

Còn bất đồng bộ bản chất của nó chạy trong threadpool, có nghĩa sẽ có 1 service chịu trách nhiệm quản lý thread, ông cứ viết function bất đồng bộ và cái service nó quản lý chia ra chạy, dev chả cần quan tâm gì đến thread cả, chả ai dám nói bất đồng bộ chỉ chạy vs IO cả, ông lục tung internet lên, dev nào nổi tiếng dám nói bất đồng bộ chỉ chạy cho IO lên tôi coi phát, bản chất do IO là cái làm cho thread chạy việc đó trong trạng thái nghỉ, bất đồng bộ sẽ tận dụng cái trạng thái nghỉ của thread đó để làm việc khác, tận dụng triệt để thread để chạy nên sẽ ít tốn cpu hơn, ram ngốn ít hơn vì tạo ra thread sẽ ngốn tài nguyên hơn, nhưng ko có nghĩa ông chạy CPU bound không đc, như .net tôi làm, nếu muốn tôi chạy thuật toán trong Task.Run, chả có vấn đề gì cả.

Mục đích của bất đồng bộ là làm đơn giản việc chạy multithread lại, cho dễ code, track bug và nó đạt đc 90% yêu cầu hiện tại của lập trình, tối ưu ram, cpu, nên tôi mới nói hiện tại thì tốt nhất nên sử dụng bất đồng bộ, chả cần quan tâm nhiều làm gì. ngôn ngữ nào cũng hỗ trợ cả, tối ưu ram vs cpu, quá tốt để sử dụng.

Còn tôi chưa bao giờ nói chạy bất đồng bộ là hơn multithread, nhưng làm lập trình thì bất đống bộ nó dễ code hơn, ko phải ngẫu nhiên hiện tại làm cái gì cũng sử dụng bất đồng bộ, cả thế giới người ta đều vậy thì nó phải có lí do, vì nó tốt cho dev, tốt cho user.

À nên nhớ multithread hay multi process nó chỉ là 1 cách lập trình, nó ko phải thuốc tiên mà giúp thuật toán chạy nhanh hơn, tăng quá nhiều thread còn làm cho phần mềm chạy chậm hơn, cũng như quá nhiều process cũng vậy, nên đừng thần thánh nó quá
 
Sửa lần cuối:
Ông học lại về kiến thức lập trình đi, mỗi hệ điều hành có 1 cách chạy khác nhau, thế nên sẽ có code chạy bên linux nhanh hơn bên windows, cũng có code chạy bên windows nhanh hơn linux, chứ ko phải cứ viết code là chạy ở nơi đâu cũng thế
ủa tôi có nói là chạy ở đâu cũng vậy à?
và nên biết ông tạo phần mềm, thực chất cái việc ông làm là giao tiếp vs hệ điều hành, ông viết tạo 1 cái file là ông call api của hệ điều hành tạo file chứ ko phải ông làm trực tiếp với phần cứng
Thực chất mọi thứ lập trình viên code là đang làm việc với hệ điều hành hết sao? cái câu lệnh tạo file được system call cung cấp thì ok nhờ hệ điều hành, còn câu lệnh a = b + c thì tôi cũng phải nhờ hệ điều hành làm nốt hả? Hệ điều hành cung cấp cho ta cách để làm những việc như tạo file, tạo socket, ... và expose chúng ra qua system call, và system call sẽ cung cấp API để các ngôn ngữ như Python, Java ... sử dụng, để người lập trình viên có thể dễ dàng hơn khi code, và không phải làm tedious works. Nhưng không phải cái gì chương trình cũng là phải nhờ OS làm, có rất nhiều instructions khác như a = b + c chẳng hạn thì CPU sẽ fetch trực tiếp từ code segment của process đó rồi thực thi luôn mà không cần thông qua một process thứ 3 nào nữa.



Còn bất đồng bộ bản chất của nó chạy trong threadpool, có nghĩa sẽ có 1 service chịu trách nhiệm quản lý thread
bất đồng bộ không tạo ra thread mới ông ơi, chỉ có cái Task.Run thì có, tôi không code c# nhưng trong cái tài liệu này của microsoft nó có nói rõ:
The Async and Await keywords don't cause additional threads to be created. Async methods don't require multi-threading because an async method doesn't run on its own thread. The method runs on the current synchronization context and uses time on the thread only when the method is active. You can use Task.Run to move CPU-bound work to a background thread, but a background thread doesn't help with a process that's just waiting for results to become available.


Hiện tại thì sài bất đồng bộ là tốt nhất
chỗ này ông bảo async là tốt nhất nên tôi mới phản biện lại ông, sao ông cứ cãi là ông không nói nhỉ.
nhưng làm lập trình thì bất đống bộ nó dễ code hơn, ko phải ngẫu nhiên hiện tại làm cái gì cũng sử dụng bất đồng bộ
cái gì cũng bất đồng bộ? vậy những task vụ chỉ sử dụng CPU mà không phải wait gì từ I/O device (ví dụ xử lý ảnh, các phép tính toán ma trận, ...) ông cũng sử dụng bất đồng bộ để giải quyết à? vậy nên tôi mới nói là tuỳ vào từng trường hợp để sử dụng cái nào cho hợp lý chứ không phải cái gì cũng bất đồng bộ như ông nói.


À nên nhớ multithread hay multi process nó chỉ là 1 cách lập trình, nó ko phải thuốc tiên mà giúp thuật toán chạy nhanh hơn, tăng quá nhiều thread còn làm cho phần mềm chạy chậm hơn, cũng như quá nhiều process cũng vậy, nên đừng thần thánh nó quá
tôi thần thánh ở chỗ nào, tôi chỉ phản biện lại cái mà ông nói là
Hiện tại thì sài bất đồng bộ là tốt nhất
chứ tôi thần thánh hoá chỗ nào?
 
ủa tôi có nói là chạy ở đâu cũng vậy à?

Thực chất mọi thứ lập trình viên code là đang làm việc với hệ điều hành hết sao? cái câu lệnh tạo file được system call cung cấp thì ok nhờ hệ điều hành, còn câu lệnh a = b + c thì tôi cũng phải nhờ hệ điều hành làm nốt hả? Hệ điều hành cung cấp cho ta cách để làm những việc như tạo file, tạo socket, ... và expose chúng ra qua system call, và system call sẽ cung cấp API để các ngôn ngữ như Python, Java ... sử dụng, để người lập trình viên có thể dễ dàng hơn khi code, và không phải làm tedious works. Nhưng không phải cái gì chương trình cũng là phải nhờ OS làm, có rất nhiều instructions khác như a = b + c chẳng hạn thì CPU sẽ fetch trực tiếp từ code segment của process đó rồi thực thi luôn mà không cần thông qua một process thứ 3 nào nữa.




bất đồng bộ không tạo ra thread mới ông ơi, chỉ có cái Task.Run thì có, tôi không code c# nhưng trong cái tài liệu này của microsoft nó có nói rõ:




chỗ này ông bảo async là tốt nhất nên tôi mới phản biện lại ông, sao ông cứ cãi là ông không nói nhỉ.

cái gì cũng bất đồng bộ? vậy những task vụ chỉ sử dụng CPU mà không phải wait gì từ I/O device (ví dụ xử lý ảnh, các phép tính toán ma trận, ...) ông cũng sử dụng bất đồng bộ để giải quyết à? vậy nên tôi mới nói là tuỳ vào từng trường hợp để sử dụng cái nào cho hợp lý chứ không phải cái gì cũng bất đồng bộ như ông nói.



tôi thần thánh ở chỗ nào, tôi chỉ phản biện lại cái mà ông nói là

chứ tôi thần thánh hoá chỗ nào?
Thôi tôi chả muốn cãi nhau với mấy ông làm gì cho mắc công.

Bất đồng bộ ko tạo ra thread mới, thế cái threadpool chắc "thread" ở đây là cho vui, điển hình ông chạy cái câu lệnh ThreadPool.GetAvailableThreads để coi thông tin nó có bn thread chạy nhá, chắc ConfigureAwait là method cho vui, cái này tôi lấy từ chính .net cho ông xem vậy nhé. Cứ thử chạy 100 cái async await đi, rồi log thread id lại xem nó chạy bn thread mà kêu ko tạo thêm thread..

Còn mọi thứ chạy trên hệ điều hành thì phải qua hệ điều hành, đến ông viết 1 + 1 = 2, thì cũng phải do hệ điều hành nó lập lịch khi nào chạy mới chạy chứ ko phải là muốn chạy là chạy đâu nhé, ông chạy cái gì trên máy tính mà ko kèm theo cái id thread ra đây tôi xem, ông nghĩ cái id thread từ đâu nó ra, giải thích tôi với.

Bất đồng bộ chạy CPU bound thì vấn đề gì, ngay trên .net, tại sao có Task.Run để chạy CPU bound, có vấn đề gì thế ???
 
thế nên mới nói lập trình song song thực sự chỉ khi ông lập trình nhúng, ông làm trực tiếp trên cpu đó mới là lập trình song song, ông mới kiểm soát đc tốc độ tối ưu của chương trình ông chạy, còn qua hệ điều hành là qua 1 layer rồi, hệ điều hành nó sẽ lập lịch chạy cho ông, đã ko biết về kiến thức phần cứng mà cứ to mồm.
hệ điều hành nó lập lịch chạy cho process or thread, và nó hoàn toàn có thể điều phối CPU để cho phép nhiều core có thể execute nhiều process or thread 1 lúc => lúc đó gọi lại parallel. Chứ k phải cái gì qua hệ đều hành thì k thể chạy parallel được. Nó là cái điều phối, phân bổ tài nguyên đến processes (thực chất thì hệ điều hành cũng là một process - process đặc biệt được đưa vào đầu tiên), chứ hệ điều hành k phải là một layer mà process phải đi qua nó và giao tiếp với phần cứng gián tiếp qua nó.
 
hệ điều hành nó lập lịch chạy cho process or thread, và nó hoàn toàn có thể điều phối CPU để cho phép nhiều core có thể execute nhiều process or thread 1 lúc => lúc đó gọi lại parallel. Chứ k phải cái gì qua hệ đều hành thì k thể chạy parallel được. Nó là cái điều phối, phân bổ tài nguyên đến processes (thực chất thì hệ điều hành cũng là một process - process đặc biệt được đưa vào đầu tiên), chứ hệ điều hành k phải là một layer mà process phải đi qua nó và giao tiếp với phần cứng gián tiếp qua nó.
Đã lập lịch mà lại song song, ông viết xong ông ko thấy nó buồn cười à, khác gì kêu đi làm cave nhưng lại còn trinh

giờ tóm lại thế này

Giờ tôi muốn thread 1 chạy core 1, thread 2 chạy core 2 ngay lập tức thì tôi làm thế nào ???

Cái thứ 2, 1 con chip 2 core vs 1 con chip 4 core, con chip nào chạy đa luồng tốt hơn, core là cái gì tại sao mà càng ngày người ta càng nhồi nhiều core vào con chip ??

Cái thứ 3, bất đồng bộ chạy tính toán thì gặp vấn đề gì ??

Cái thứ 4, ông chạy nhờ hệ điều hành điều phối, thì nó song song cái gì ??? Trong khi tôi lập trình trên chính con cpu, tôi kêu core 1 tính dùm tôi công thức A, core 2 tính dùm tôi công thức B, vậy cái nào mới là song song ???

Cái thứ 5, giờ cpu đang ăn 99%, ông chạy multithread kiểu gì, hay làm cách nào để chạy ưu tiên tính toán của ông trên con chip trc mấy cái tính toán khác, hệ điều hành ko cấp quyền cho ông thì ông chạy như thế nào ???

Cái thứ 6, ông biết ông đang nói cái gì ko, cái gì mà giao tiếp với phần cứng ko cần hệ điều hành, ông chỉ cho tôi 1 cái ví dụ phát, ông lập trình trên hệ điều hành mà lại kêu giao tiếp ko cần qua hệ điều hành, giờ tôi đó ông giao tiếp vs cái wifi mà trên win ko có driver đấy, tôi đố ông ghi đc file nếu win ko nhận ổ đĩa cứng đấy, ông giao tiếp hộ cái phần cứng mà ko có driver hộ tôi phát
 
Sửa lần cuối:
Đã lập lịch mà lại song song, ông viết xong ông ko thấy nó buồn cười à, khác gì kêu đi làm cave nhưng lại còn trinh

giờ tóm lại thế này

Giờ tôi muốn thread 1 chạy core 1, thread 2 chạy core 2 ngay lập tức thì tôi làm thế nào ???

Cái thứ 2, 1 con chip 2 core vs 1 con chip 4 core, con chip nào chạy đa luồng tốt hơn, core là cái gì tại sao mà càng ngày người ta càng nhồi nhiều core vào con chip ??

Cái thứ 3, bất đồng bộ chạy tính toán thì gặp vấn đề gì ??

Cái thứ 4, ông chạy nhờ hệ điều hành điều phối, thì nó song song cái gì ??? Trong khi tôi lập trình trên chính con cpu, tôi kêu core 1 tính dùm tôi công thức A, core 2 tính dùm tôi công thức B, vậy cái nào mới là song song ???

Cái thứ 5, giờ cpu đang ăn 99%, ông chạy multithread kiểu gì, hay làm cách nào để chạy ưu tiên tính toán của ông trên con chip trc mấy cái tính toán khác, hệ điều hành ko cấp quyền cho ông thì ông chạy như thế nào ???
nói với ông, cạn lời. Tôi k định comment vào câu trả lời của ông ngay từ ban đầu, nhưng vì tôi nghĩ sẽ có những bạn không viết vào xem comment kiểu 10 năm đi làm của ông rồi theo.

Đã lập lịch mà lại song song
ông k nghĩ là 1 con tú bà có thể lập lịch cho 4 con ca ve có thể phục phụ 4 thằng đại gia, mỗi đứa 1 con trong 1 thời điểm à? như vậy có được xem là hệ thống của con tú bà này đang phục vụ song song nhiều khách 1 thời điểm không? Còn nếu không theo ông như thế nào mới gọi là song song?


Giờ tôi muốn thread 1 chạy core 1, thread 2 chạy core 2 ngay lập tức thì tôi làm thế nào ???
cái này OS lo chứ k phải lập trình viên lo, nhiệm vụ của nó là điều phối thực hiện threads, processes sao cho tối ưu được phần cứng có sẵn.

Cái thứ 2, 1 con chip 2 core vs 1 con chip 4 core, con chip nào chạy đa luồng tốt hơn, core là cái gì tại sao mà càng ngày người ta càng nhồi nhiều core vào con chip ??
Cài này còn tuỳ vào hiệu năng của mỗi core trong máy 2 cores và hiệu năng của mỗi core trong máy 4 cores, Nếu mỗi core đều có hiệu năng như nhau thì tất nhiên con 4 core hiệu năng CPU sẽ tốt hơn ~ gấp 2 lần con 2 core. Còn core là cái gì thì ông học môn Kiến Trúc Máy Tính ông sẽ rõ, tôi k rảnh để ngồi đây nói với ông.

Cái thứ 3, bất đồng bộ chạy tính toán thì gặp vấn đề gì ??
Méo có vấn đề gì cả, vấn đề là nếu đó CPU bound thì chạy async hay sync nó cho ra kết quả về mặt hiệu năng như nhau, async không giúp được gì trong tình huống này.

Cái thứ 4, ông chạy nhờ hệ điều hành điều phối, thì nó song song cái gì ??? Trong khi tôi lập trình trên chính con cpu, tôi kêu core 1 tính dùm tôi công thức A, core 2 tính dùm tôi công thức B, vậy cái nào mới là song song ???
Ông đủ sức lập trình được trên CPU của máy tính không, ông biết CPU máy thực hiện theo nguyên tắc nào không? mà ông đòi lập trình trên nó. Thế giới người ta dùng parallelism tràn lan gần 20 năm nay, mà ông đòi cứ phải lập trình trực tiếp trên CPU thì mới có parallelism vậy thì mấy ai làm nổi?


Ông hãy đọc sách hoặc đưa ra paper, chứ đừng có nói theo kiểu ông đi làm bao năm như thế này thế kia. Nếu k biết tôi chỉ cho ông học 2 môn:
  • Kiến trúc máy tính,
  • Hệ điều hành
Tôi có thể refer cho ông cuốn kinh điển Operating System Concept - Abraham Silberschatz, Peter B. Galvin & Greg Gagne - được giảng dạy tại rất nhiều trường đại học lớn trên thế giới. Chắc ông cũng sẽ không chiu đọc đâu vì ông cho mình hơn những người đó mà, thôi tôi quote cho ông đoạn người ta viết nói về vấn đề này luôn:
Multithreaded programming provides a mechanism for more efficient use of these multiple computing cores and improved concurrency. Consider an application with four threads. On a system with a single computing core, concurrency merely means that the execution of the threads will be interleaved over time (Figure 4.3), because the processing core is capable of executing only one thread at a time. On a system with multiple cores, however, concurrency means that the threads can run in parallel, because the system can assign a separate thread to each core. (trang 190 chapter4 - Threads)

Còn về async thì tôi refer mọi người đọc bài viết sau đây, được viết ra bởi trang chủ của một framework viết bằng python, một bài viết hay nói rõ và dễ hiểu để phân biệt parallelism >< concurrency, phân biệt async, multithreading và multiprocessing.

https://fastapi.tiangolo.com/async/

Tôi chấm dứt tranh cãi với ông ở đây, với đa số mọi người, nếu có ý kiến phản biện tôi cũng sẽ cẩn thận hỏi với mong muốn được trao đổi thêm để qua đó bản thân vỡ lẽ được thêm kiến thức, nhưng với ông thì tôi sai vì không kiềm chế được.
 
Sửa lần cuối:
nói với ông, cạn lời. Tôi k định comment vào câu trả lời của ông ngay từ ban đầu, nhưng vì tôi nghĩ sẽ có những bạn không viết vào xem comment kiểu 10 năm đi làm của ông rồi theo.


ông k nghĩ là 1 con tú bà có thể lập lịch cho 4 con ca ve có thể phục phụ 4 thằng đại gia, mỗi đứa 1 con trong 1 thời điểm à? như vậy có được xem là hệ thống của con tú bà này đang phục vụ song song nhiều khách 1 thời điểm không? Còn nếu không theo ông như thế nào mới gọi là song song?



cái này OS lo chứ k phải lập trình viên lo, nhiệm vụ của nó là điều phối thực hiện threads, processes sao cho tối ưu được phần cứng có sẵn.


Cài này còn tuỳ vào hiệu năng của mỗi core trong máy 2 cores và hiệu năng của mỗi core trong máy 4 cores, Nếu mỗi core đều có hiệu năng như nhau thì tất nhiên con 4 core hiệu năng CPU sẽ tốt hơn ~ gấp 2 lần con 2 core. Còn core là cái gì thì ông học môn Kiến Trúc Máy Tính ông sẽ rõ, tôi k rảnh để ngồi đây nói với ông.


Méo có vấn đề gì cả, vấn đề là nếu đó CPU bound thì chạy async hay sync nó cho ra kết quả về mặt hiệu năng như nhau, async không giúp được gì trong tình huống này.


Ông đủ sức lập trình được trên CPU của máy tính không, ông biết CPU máy thực hiện theo nguyên tắc nào không? mà ông đòi lập trình trên nó. Thế giới người ta dùng parallelism tràn lan gần 20 năm nay, mà ông đòi cứ phải lập trình trực tiếp trên CPU thì mới có parallelism vậy thì mấy ai làm nổi?


Ông hãy đọc sách hoặc đưa ra paper, chứ đừng có nói theo kiểu ông đi làm bao năm như thế này thế kia. Nếu k biết tôi chỉ cho ông học 2 môn:
  • Kiến trúc máy tính,
  • Hệ điều hành
Tôi có thể refer cho ông cuốn kinh điển Operating System Concept - Abraham Silberschatz, Peter B. Galvin & Greg Gagne - được giảng dạy tại rất nhiều trường đại học lớn trên thế giới. Chắc ông cũng sẽ không chiu đọc đâu vì ông cho mình hơn những người đó mà, thôi tôi quote cho ông đoạn người ta viết nói về vấn đề này luôn:


Còn về async thì tôi refer mọi người đọc bài viết sau đây, được viết ra bởi trang chủ của một framework viết bằng python, một bài viết hay nói rõ và dễ hiểu để phân biệt parallelism >< concurrency, phân biệt async, multithreading và multiprocessing.

https://fastapi.tiangolo.com/async/

Tôi chấm dứt tranh cãi với ông ở đây, với đa số mọi người, nếu có ý kiến phản biện tôi cũng sẽ cẩn thận hỏi với mong muốn được trao đổi thêm để qua đó bản thân vỡ lẽ được thêm kiến thức, nhưng với ông thì tôi sai vì không kiềm chế được.
Thế nên tôi mới nói lập trình song song thực sự nó chỉ có ở lập trình nhúng, khi ông đụng chạm trực tiếp trên con chip, chứ ông ngồi viết phần mềm trên hệ điều hành mà đòi song song, ông nghe có vô lý vcl ra ko
Thế tôi hỏi ông, cái ví dụ của ông có 4 con cave nhưng tận 16 thằng đại gia thì nó song song kiểu gì, ông kiểm soát hay là con tú bà nó kiểm soát, giờ trong 16 thằng đại gia, có 4 thằng là thằng đệ của ông, ông kêu con tú bà kêu 4 con cave phục vụ 4 thằng đệ ông trc mà nó ko nghe, nó cứ ưu tiên thằng nào đến trước thì sướng trc thì song song cái chỗ nào

Ông nói viết phần mềm ko cần qua hệ điều hành giao tiếp thằng vs phần cứng, ông đưa ra ví dụ xem, cái nào ko qua hệ điều hành, chắc trên hệ điều hành nó phân pid, rồi thread id làm kiểng, đây đòi lập trình trên win đòi giao tiếp ko cần qua win, ăn nói vớ va vớ vẩn bày đặt mang sách tây sách tàu ra để khè

Chạy bất đồng bộ chạy cpu bound thì bị cái gì, kêu hiệu năng như nhau, vậy tóm lại là sài vẫn đc chứ gì, thế có bị cái mẹ gì ảnh hưởng hiệu suất mà ông kêu ko đc chạy

Cái lập trình song song trên hệ điều hành nó là multi thread, multi process như ông nói và nó nằm trong cái hệ điều hành, mẹ đọc sách cho cố vào, hậu quả của việc học vẹt, chỉ biết lý thuyết chả biết cái quái gì về thực tế cả, multi thread ông chạy 1000 thread xem coi song song ko, multi process ông chạy 1000 process coi nó có song song cho ông ko, đã ko biết cái mẹ gì, bày đặt mang sách tây sách tàu ra khè, làm gì vậy, chỉ mỗi ông biết đọc tiếng anh à

Biết tại sao thế giới người ta phải lên 64 bit chứ ko sài 32 bit ko, tại sao windows ko cài đc lên chip arm ko, tại sao mọi thứ về lập trình đều là mã nhị phân mà tại sao android lại khác windows ko, trong khi bản chất mọi thứ chỉ là 1010, học hành cho lắm vào, kinh nghiệm thì không có, chỉ đc cái giỏi search, chả đc cái mẹ gì. Vớ vẩn vcl

Del mẹ có con chip chứ có gì ko lập trình đc, chứ ông nghĩ lập trình nhúng là lập trình ở đâu, hay chỉ chip trên con pc mới là chip, ăn nói vớ va vớ vẩn, hậu quả của việc học vẹt là đây chứ đâu

Học vẹt nên chỉ đọc chứ del bao giờ áp dụng vào thực tế, nghe cái chữ parallelism là nghĩ song song, song cái cục cứt chứ song, học vẹt nó vừa vừa thôi, mà chắc méo gì ông biết cái ông đang viết, kiến thức bản thân mà ko giải thích đc, cứ lấy tiếng anh tiếng tàu ra khè thì tôi biết ông cứ chả biết mẹ gì cả, nói phí thời gian

Cái thứ 5, giờ cpu đang ăn 99%, ông chạy multithread kiểu gì, hay làm cách nào để chạy ưu tiên tính toán của ông trên con chip trc mấy cái tính toán khác, hệ điều hành ko cấp quyền cho ông thì ông chạy như thế nào ???
Nhờ thiên tài học vẹt làm sao để chạy đc tính huống này phát, search google nhanh lắm mà

Cái thứ 6, ông biết ông đang nói cái gì ko, cái gì mà giao tiếp với phần cứng ko cần hệ điều hành, ông chỉ cho tôi 1 cái ví dụ phát, ông lập trình trên hệ điều hành mà lại kêu giao tiếp ko cần qua hệ điều hành, giờ tôi đó ông giao tiếp vs cái wifi mà trên win ko có driver đấy, tôi đố ông ghi đc file nếu win ko nhận ổ đĩa cứng đấy, ông giao tiếp hộ cái phần cứng mà ko có driver hộ tôi phát
Thiên tài học vẹt giải quyết hộ tôi cái này với, thiên tài bảo phần mềm chạy trên hệ điều hành có thể giao tiếp vs phần cứng ko cần qua hệ điều hành mà :))))
 
Sửa lần cuối:
K hiểu sao cứ nhắc đến chủ đề về concurrency, parallel các kiểu thì lại cãi nhau loạn xạ cả lên. Mỗi người nói 1 ý. Đúng kiểu thầy bói xem voi, :beat_shot:
 
Chủ đề này rất là hay, rất nhiều bạn hiểu rất rõ vấn đề và làm chủ nó, rất nhiều bạn nắm rất vững về kiến trúc máy tính, lý thuyết căn bản mà rất nhiều bạn vô tình quên sau khi đi làm 1 thời gian không còn dùng tới.
 
Cái thứ 6, ông biết ông đang nói cái gì ko, cái gì mà giao tiếp với phần cứng ko cần hệ điều hành, ông chỉ cho tôi 1 cái ví dụ phát, ông lập trình trên hệ điều hành mà lại kêu giao tiếp ko cần qua hệ điều hành, giờ tôi đó ông giao tiếp vs cái wifi mà trên win ko có driver đấy, tôi đố ông ghi đc file nếu win ko nhận ổ đĩa cứng đấy, ông giao tiếp hộ cái phần cứng mà ko có driver hộ tôi phát
đoạn này ông rồng nói đúng mà nhỉ? Mình code gà, toàn làm CRUD thôi
 
Chủ đề này rất là hay, rất nhiều bạn hiểu rất rõ vấn đề và làm chủ nó, rất nhiều bạn nắm rất vững về kiến trúc máy tính, lý thuyết căn bản mà rất nhiều bạn vô tình quên sau khi đi làm 1 thời gian không còn dùng tới.
chủ đề toàn combat thì hay thế nào
 
Thế nên tôi mới nói lập trình song song thực sự nó chỉ có ở lập trình nhúng, khi ông đụng chạm trực tiếp trên con chip, chứ ông ngồi viết phần mềm trên hệ điều hành mà đòi song song, ông nghe có vô lý vcl ra ko
Thế tôi hỏi ông, cái ví dụ của ông có 4 con cave nhưng tận 16 thằng đại gia thì nó song song kiểu gì, ông kiểm soát hay là con tú bà nó kiểm soát, giờ trong 16 thằng đại gia, có 4 thằng là thằng đệ của ông, ông kêu con tú bà kêu 4 con cave phục vụ 4 thằng đệ ông trc mà nó ko nghe, nó cứ ưu tiên thằng nào đến trước thì sướng trc thì song song cái chỗ nào

Ông nói viết phần mềm ko cần qua hệ điều hành giao tiếp thằng vs phần cứng, ông đưa ra ví dụ xem, cái nào ko qua hệ điều hành, chắc trên hệ điều hành nó phân pid, rồi thread id làm kiểng, đây đòi lập trình trên win đòi giao tiếp ko cần qua win, ăn nói vớ va vớ vẩn bày đặt mang sách tây sách tàu ra để khè

Chạy bất đồng bộ chạy cpu bound thì bị cái gì, kêu hiệu năng như nhau, vậy tóm lại là sài vẫn đc chứ gì, thế có bị cái mẹ gì ảnh hưởng hiệu suất mà ông kêu ko đc chạy

Cái lập trình song song trên hệ điều hành nó là multi thread, multi process như ông nói và nó nằm trong cái hệ điều hành, mẹ đọc sách cho cố vào, hậu quả của việc học vẹt, chỉ biết lý thuyết chả biết cái quái gì về thực tế cả, multi thread ông chạy 1000 thread xem coi song song ko, multi process ông chạy 1000 process coi nó có song song cho ông ko, đã ko biết cái mẹ gì, bày đặt mang sách tây sách tàu ra khè, làm gì vậy, chỉ mỗi ông biết đọc tiếng anh à

Biết tại sao thế giới người ta phải lên 64 bit chứ ko sài 32 bit ko, tại sao windows ko cài đc lên chip arm ko, tại sao mọi thứ về lập trình đều là mã nhị phân mà tại sao android lại khác windows ko, trong khi bản chất mọi thứ chỉ là 1010, học hành cho lắm vào, kinh nghiệm thì không có, chỉ đc cái giỏi search, chả đc cái mẹ gì. Vớ vẩn vcl

Del mẹ có con chip chứ có gì ko lập trình đc, chứ ông nghĩ lập trình nhúng là lập trình ở đâu, hay chỉ chip trên con pc mới là chip, ăn nói vớ va vớ vẩn, hậu quả của việc học vẹt là đây chứ đâu

Học vẹt nên chỉ đọc chứ del bao giờ áp dụng vào thực tế, nghe cái chữ parallelism là nghĩ song song, song cái cục cứt chứ song, học vẹt nó vừa vừa thôi, mà chắc méo gì ông biết cái ông đang viết, kiến thức bản thân mà ko giải thích đc, cứ lấy tiếng anh tiếng tàu ra khè thì tôi biết ông cứ chả biết mẹ gì cả, nói phí thời gian

Cái thứ 5, giờ cpu đang ăn 99%, ông chạy multithread kiểu gì, hay làm cách nào để chạy ưu tiên tính toán của ông trên con chip trc mấy cái tính toán khác, hệ điều hành ko cấp quyền cho ông thì ông chạy như thế nào ???
Nhờ thiên tài học vẹt làm sao để chạy đc tính huống này phát, search google nhanh lắm mà

Cái thứ 6, ông biết ông đang nói cái gì ko, cái gì mà giao tiếp với phần cứng ko cần hệ điều hành, ông chỉ cho tôi 1 cái ví dụ phát, ông lập trình trên hệ điều hành mà lại kêu giao tiếp ko cần qua hệ điều hành, giờ tôi đó ông giao tiếp vs cái wifi mà trên win ko có driver đấy, tôi đố ông ghi đc file nếu win ko nhận ổ đĩa cứng đấy, ông giao tiếp hộ cái phần cứng mà ko có driver hộ tôi phát
Thiên tài học vẹt giải quyết hộ tôi cái này với, thiên tài bảo phần mềm chạy trên hệ điều hành có thể giao tiếp vs phần cứng ko cần qua hệ điều hành mà :))))
Tôi vẫn đợi anh thiên tài nào đó chê tôi tào lào vào trả lời câu hỏi của tôi :D
Anh thiên tài lúc nào cũng phải đệm thêm mấy cuốn sách tây tàu vào đâu rồi :D anh thiên tài giao tiếp trực tiếp vs phần cứng ko cần qua windows đâu rồi :D
Kiến thức tôi hạn hẹp, tôi chỉ học từ kinh nghiệm bản thân nên ko bằng anh thiên tài trên đây, vẫn mong anh giải đáp thắc mắc trên đây, bàn về bất đồng bộ, song song mà ko nói gì về phần cứng thì chả khác nào cưỡi ngựa xem voi :D
 

Thống kê chủ đề

Ngày tạo
o0alvin0o,
Người trả lời cuối
tuong_tuong_1,
Trả lời
163
Lượt xem
29.740
Quay lại
Lên đầu trang