Thắc Mắc - Hỏi Về Async Vs Thread - VOZ

VOZ
  • Forums New posts
  • Latests Featured content New posts New profile posts Latest activity
Log in Register What's new
  • New posts
Menu Log in Register Install the app Install How to install the app on iOS

Follow along with the video below to see how to install our site as a web app on your home screen.

Note: This feature may not be available in some browsers.

  • Forums
  • Học tập & Sự nghiệp
  • Lập trình / CNTT
You are using an out of date browser. It may not display this or other websites correctly.You should upgrade or use an alternative browser. thắc mắchỏi về async vs thread
  • Thread starter Thread starter karu88
  • Start date Start date May 13, 2020
  • 1
  • 2
  • 3
Next 1 of 3

Go to page

Go Next Last karu88

karu88

Senior Member
để chạy đa luồng thì nên dùng cái nào vậy mấy bác. Ưu nhược điểm của mỗi cái là thế nào? Bác nào rảnh phân tích giúp em tí được không? qkhanhpro

qkhanhpro

Đã tốn tiền
Nói ra thì dông dài nhưng khi cần hỏi câu này thì lời khuyên pratical nhất mình có thể cho là dùng async đi (Vì không hiểu rõ / không nghiên cứu kỹ / không có người guide thì code multi threading dễ ra đống rác lắm) Async không có nghĩa là đa luồng. Nhưng ( by framework implementation ) async "thường" tận dụng đa luồng khi có thể KuroOokami

KuroOokami

Đã tốn tiền
Async là concurrent, Thread là parallel, 2 cái đó là 2 cái khái niệm khác nhau mà :| Chạy đa luồng thì multi thread thôi, còn chạy bất đồng bộ thì async TTN_vOz

TTN_vOz

Senior Member
Bạn đang hỏi sai câu hỏi. Async là khái niệm thực thi một operation bất đồng bộ. Thread nằm ở tầng low level để thực thi việc bất đồng bộ đó. Tuy nhiên các ngôn ngữ sẽ cung cấp cho bạn cách thức để thực thi Async mà ko cần phải quan tâm quản lý Thread. Ví dụ Java có Future karu88

karu88

Senior Member
Cảm ơn mấy thìm. Đang đọc mấy cái tiếng anh cũng hiểu lơ mơ rồi. Cái mục tiêu của em là làm nhiều luồng thực hiện, giống như IDM có 16 luồng download 1 lúc ấy. em đọc thì thấy có cái thì họ dùng thread, gọi 16 thread dể chạy function. Có cái họ lại dùng async/await. Mới học nên chưa rõ lắm. trước giờ em toàn xài thread. Muốn cho chạy nhanh thì cứ kêu nhiều thread ra cho nó chạy. Mà dạo này đọc code mẫu thấy đa số xài async nên mới tìm hiểu thêm. Vậy là thread là low-level để chạy đa luồng song song. còn async là lập trình bất đồng bộ, cấp cao hơn thread. Nó quản lý thread để đơn giản hóa việc đa luồng cho mình hả mấy thím. Với cả đọc thấy chạy thread cần phải chú ý tới thread-safe. Còn Async thì không phải lo. Chắc từ nay em xài async hết. karu88

karu88

Senior Member
tuananh_304 said: Thím phải xác định được task vụ của thím là gì. CPU bound hay IO bound. Trước tiên async đại khái là trong khi bạn đang chờ kết quả từ IO, thì cpu có thể tạm thời tạm dừng tác vụ đó đi làm cái khác. Nếu mà tác vụ là CPU bound (xử lý ảnh, xoay crop) thì async k có ý nghĩa lắm, vì nó vẫn chiếm dụng tài nguyên CPU, main thread vẫn có thể bị blocked. Còn nếu là IO bound như http request, disk io, (trong khi bạn đang chờ kết quả thì cpu có thể đi làm việc khác) thì bạn nên sử dụng async. À như bác trên có nói, thì Java nó cho bác tạo 1 Thread-pool nằm tách biệt với main-thread. Bác summit cái job vào chạy trong cái thread-pool ấy thì nó trả về kết quả trong Future, Lúc ý main-thread k bị block mà vẫn chạy dc những tác vụ khác. Còn tụi singlethread như Nodejs, Python thì async mà sử dụng CPU bound thì không có ý nghĩa j hết. Click to expand...
Chỗ này em đọc thấy họ nhóm async với thread vào chung một nhóm cho I/O bound. Còn CPU bound thì phải xài multiprocessing. Có đúng không thím karu88

karu88

Senior Member
tuananh_304 said: Thím phải xác định được task vụ của thím là gì. CPU bound hay IO bound. Trước tiên async đại khái là trong khi bạn đang chờ kết quả từ IO, thì cpu có thể tạm thời tạm dừng tác vụ đó đi làm cái khác. Nếu mà tác vụ là CPU bound (xử lý ảnh, xoay crop) thì async k có ý nghĩa lắm, vì nó vẫn chiếm dụng tài nguyên CPU, main thread vẫn có thể bị blocked. Còn nếu là IO bound như http request, disk io, (trong khi bạn đang chờ kết quả thì cpu có thể đi làm việc khác) thì bạn nên sử dụng async. À như bác trên có nói, thì Java nó cho bác tạo 1 Thread-pool nằm tách biệt với main-thread. Bác summit cái job vào chạy trong cái thread-pool ấy thì nó trả về kết quả trong Future, Lúc ý main-thread k bị block mà vẫn chạy dc những tác vụ khác. Còn tụi singlethread như Nodejs, Python thì async mà sử dụng CPU bound thì không có ý nghĩa j hết. Click to expand...
Chỗ này em đọc thấy họ nhóm async với thread vào chung một nhóm cho I/O bound. Còn CPU bound thì phải xài multiprocessing. Có đúng không thím ez-aqua

ez-aqua

Senior Member
Lâu rồi mình không đụng vào C# code, nhưng mình có thể giải thích Async và Parallel là như thế này. Với Async, vd như bạn làm bánh mì, sau khi bạn nặn bánh xong rồi bỏ vào lò nướng, thay vì bạn đứng im chờ cho đến khi nào bánh mì nó nướng xong rồi mới đi chuẩn bị nhân bánh, thì bạn cứ thả cho lò nó hoạt động, còn mình thì cứ tiếp tục chuẩn bị nhân bánh. Khi bạn nghe thấy tiếng ting báo bánh đã nướng xong, và vụ nhân bánh bạn cũng chuẩn bị xong, thì bạn sẽ lấy bánh ra khỏi lò, nhét nhân vào bánh, rồi bỏ bánh vào miệng. Trông thì có vẻ bạn đang làm 2 việc cùng 1 lúc là vừa làm bánh vừa làm nhân, nhưng thực tế bạn ko làm song song, chỉ là ko để thời gian chết thôi. Còn nếu bạn thả task xuống threadpool Task.Run() thì cái này nó giống như bạn 1 tay vẽ hình tròn, 1 tay vẽ hình vuông vậy. Nếu bạn có 2 bộ não (CPU), thì bạn có thể dùng não 1 điều khiển tay trái vẽ hình tròn, dùng não 2 điều khiển tay phải vẽ hình vuông. Lúc này bạn mới thực sự là làm 2 việc cùng 1 lúc. Khi Async kết hợp parallel: Ví dụ bạn có 3 bộ não: Não 1 nhiệm vụ nghe câu hỏi và viết câu trả lời ra giấy, câu hỏi vào liên tục, não 2 và não 3 làm nhiệm vụ giải toán. Não (CPU) 1 nghe câu hỏi từ bên ngoài, giao việc (tasks) cho não 2 và não 3 giải. Thay vì nó đứng im, nhìn chằm chằm chờ cho đến khi não 2 và 3 giải xong (block) rồi mang đáp án do não 2 và não 3 giải ra viết vào giấy rồi mới nghe câu hỏi mới, thì nó giao việc, rồi trở lại trạng thái sẵn sàng nghe câu hỏi mới (non-blocking), sẽ nghe và note lại câu hỏi mới, nhưng cũng đang trong trạng thái chờ câu trả lời từ não 2 và 3 (await). Nếu nó không đang bận nghe câu hỏi mới hoặc bận làm việc gì đó khác và não 2 và 3 đã giải xong bài thì nó sẽ mang kết quả từ 2 não kia về rồi viết vào giấy. Những việc của não 1 làm là async. Não 2 não 3 giải các bài toán khác nhau, trong cùng một lúc. Có bài toán khó, não phải giải lâu hơn thì trả kết quả nhanh hơn. Có bài dễ hơn thì trả kết quả nhanh hơn.... Bọn não 2 và 3 đang làm việc parallel với nhau. Lâu rồi mình ko đụng vào code C# nên cũng ko biết có để sai sót gì hay không, nhưng bạn có thể đọc thêm ở đây. https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/concepts/async/ sirhung1993

sirhung1993

Người qua đường
Async/ Sync là hiện tượng mình thấy trong run-time:
  1. Nếu Async thì mình sẽ thấy thứ tự chạy ko xác định trước (ví dụ Javascript với callback hoặc promise ) hoặc là main-thread ko bị block tại 1 câu lệnh mà chạy tới những câu lệnh sau đó.
  2. Sync là hiện tượng code chạy tuần tự từ trên xuống dưới, cho dù là đợi network mất 1s nó vẫn phải block đó rồi mới chạy tới câu lệnh tiếp theo.
Multi-thread/Thread-pool hay concurrency/routine là cách thực hiện các câu lệnh sao cho nó độc lập với main-thread. Vì OS-kernel chỉ quản lý ở tầng process/thread để cấp phát CPU cycle, nên có nhiều cách để tối ưu thread thông qua đặc tính của OS và cách chương trình quản lý câu lênh (hiểu luôn ở tầng low-level instruction ). Phải tách được khái niệm thread của chương trình (ví dụ Thread.class trong Java) với thread vật lý của OS. Routine là một dạng thuộc cách ngôn ngữ lập trình phân tách low-level instructions độc lập với OS Thread, theo như Golang routine thì nó dùng ít tài nguyên hơn và khởi tạo nhanh hơn (mỗi OS-thread thường được cấp phát stack memory độc lập, thường là 1MB). Với cách Javascript Async thì dựa vào callback stack + event queue, main thread của nó chỉ có 1, nhưng thread-pool được khởi tạo thì default là 4 OS-thread (trong trường hợp của Node.js, còn trên browser thì có thể khác). event queue thì tận dụng trigger từ 1 thư viện của OS là libuv. Callback được đẩy vào callback stack, thread-pool poll ra thực thi dựa trên V8 engine. Khi callback thực thi xong, thì libuv bắt được sự kiện và đẩy vào 1 event-queue bao gồm thông tin về callback vs data trả về. Main-thread sẽ quét qua event-queue này. Nên code của JS chạy trên V8 hành vi mặc định là ASYNC. Nhưng nếu main-thread chạy các tác vụ nặng và ko tạo callback hay promise thì main-thread sẽ phải tự xử -> CHẬM zulu

zulu

Member
ez-aqua said: Lâu rồi mình không đụng vào C# code, nhưng mình có thể giải thích Async và Parallel là như thế này. Với Async, vd như bạn làm bánh mì, sau khi bạn nặn bánh xong rồi bỏ vào lò nướng, thay vì bạn đứng im chờ cho đến khi nào bánh mì nó nướng xong rồi mới đi chuẩn bị nhân bánh, thì bạn cứ thả cho lò nó hoạt động, còn mình thì cứ tiếp tục chuẩn bị nhân bánh. Khi bạn nghe thấy tiếng ting báo bánh đã nướng xong, và vụ nhân bánh bạn cũng chuẩn bị xong, thì bạn sẽ lấy bánh ra khỏi lò, nhét nhân vào bánh, rồi bỏ bánh vào miệng. Trông thì có vẻ bạn đang làm 2 việc cùng 1 lúc là vừa làm bánh vừa làm nhân, nhưng thực tế bạn ko làm song song, chỉ là ko để thời gian chết thôi. Còn nếu bạn thả task xuống threadpool Task.Run() thì cái này nó giống như bạn 1 tay vẽ hình tròn, 1 tay vẽ hình vuông vậy. Nếu bạn có 2 bộ não (CPU), thì bạn có thể dùng não 1 điều khiển tay trái vẽ hình tròn, dùng não 2 điều khiển tay phải vẽ hình vuông. Lúc này bạn mới thực sự là làm 2 việc cùng 1 lúc. https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/concepts/async/ Click to expand...
Cơ bản thì bác cũng đúng rồi, mình chỉ nói thêm 1 chút: Về bản chất sử dụng Thread hay ThreadPool có Parallel hay không phụ thuộc vào kiến trúc CPU. Nếu CPU đơn luồng thì tất cả chỉ là giả Parallel. Thêm nữa, C# thì async phát huy tốt vs các tác vụ IO bound thôi, chứ CPU bound thì cũng ko khác biệt j về hiệu năng mang lại. Z

zhukov

Member
Hài ...có đôi lời. Async khác thread. Vs các ngôn ngữ hiện đại cái này hay hơn thread kiểu cổ điển của os cung cấp. Có rất nhiều bác nghĩ thread là Parallel. Thực tế hoàn toàn sai..gần hết. Thread nằm trong tiến trình process. Os khi run có quá nhiều process làm gì có chuyện song song được. Thực sự nếu một process được gắn vào một core cpu thì mới có vụ song song thực. Kiểu như OpenMP or MPI. Haizz chi phí của os cho việc context thread switch là lớn hơn nhiều so với mấy vụ Async or coroutine ( bản chất gần như là một). Thực hiện các context switch ở ko gian người dùng. Chi phí rẻ hơn nhiều ... Từ lâu đã ko mấy khi dùng mấy cái thread. Nhất cho mấy vụ I/O liên quan tới network. Đôi lời xàm xàm ý kiến cá nhân. D

dreamnight

Junior Member
Câu hỏi có vẻ gây hiểu lầm vì bản chất 2 cái keywords trên khác nhau về concept tí: - Thread: là một luồng xử lý được sinh ra bởi scheduler (với nhiều programing language thì nó là ThreadPool) của process của CPU. - Async: Ý chỉ asynchronous bất đồng bộ, nó cho phép các threads hoạt động độc lập và chỉ "wait" khi cần một kết quả từ thread khác. Gọi nó là non-blocking cũng chẳng sai nhưng block cái gì mới là đáng nói. Quay lại câu hỏi "Lập trình đa luồng" thì sài cái nào? Câu trả lời là chẳng có cái nào the best, phải tùy vào từng use cases. Đại đa số dev đều biết 2 kiểu là parallel và async, mình chi tiết 1 tí cho bạn dễ hiểu: - Parallel hay async programing đều là dạng lập lịch scheduler trong ThreadPool, cho phép quản lý CPU bound để thực thi threads. - Parallel: là dạng lập lịch cho nhiều thread mà trong đó không quan tâm điểm bắt đầu thực thi mà chỉ quan tâm đến thời điểm mà mọi threads đã được xử lý xong. Trong quá trình xử lý threads, số lượng threads được thực thi cùng lúc sẽ được xác định bởi N phải <= số CPU M (M phải > 1). - Async: là dạng lập lịch cho nhiều thread mà trong đó các threads hoạt động độc lập, chỉ "wait" tại một thời điểm đã được xác định nào đó. Đại đa số đều ưa dùng cái này vì nó giúp code dễ control hơn, vì bạn đã xác định chỗ "wait" thay vì phải "wait" tất cả như Parallel. Tuy nhiên bạn phải hiểu rõ một vấn đề : Lập trình đa luồng ko đồng nghĩa bạn lập trình đa CPU, việc sử dụng tốt đa CPU lại phụ thuộc vào OS và low-level của programming language của bạn. ThuyMy

ThuyMy

Senior Member
dreamnight said: Câu hỏi có vẻ gây hiểu lầm vì bản chất 2 cái keywords trên khác nhau về concept tí: ... Click to expand...
Kiến thức kiểu gì hỏng bung bét thế này :censored: D

dreamnight

Junior Member
ThuyMy said: Kiến thức kiểu gì hỏng bung bét thế này :censored: Click to expand...
Hỏng chỗ nào xin bạn chỉ giúp :confused:? Nguồn của mình: https://docs.microsoft.com/en-us/dotnet/standard/threading/threads-and-threading https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/concepts/async/ Bạn chủ topic dùng từ async vs thread nhé, và 2 cái đó concept khác nhau. Nipin

Nipin

Member
đọc thread thấy nản vkl, trước giờ chỉ thấy parallel vs concurrent, sync vs async thôi lần đầu mới thấy đi so parallel với async. tiếp đó thì loạn khái niệm, cơ mà cái này thông cảm, thằng crystal-lang phải viết hẳn một page dài giải thích cái này: https://crystal-lang.org/reference/guides/concurrency.html cơ mà cái quan trọng nhất là các bạn đíu phân biệt được là mỗi một hệ thống, một ngôn ngữ hoặc thậm chí là một thư viện thì nó sẽ có implemation khác nhau về thread (native thread vs green thread... m:n thread vs 1:1 thread...), có thằng lại dùng coroutine, fiber, actor model các kiểu, thành ra khi giải thích một chuyện thì phải nói rõ ra là mình đang dùng ngôn ngữ nào (nếu thư viện đặc biệt thì cũng cần nói luôn cả thư viện), chứ cứ giải thích mù mờ, cái hiểu cái không thì chỉ tổ làm người khác hiểu sai :/ karu88

karu88

Senior Member
Nipin said: đọc thread thấy nản vkl, trước giờ chỉ thấy parallel vs concurrent, sync vs async thôi lần đầu mới thấy đi so parallel với async. tiếp đó thì loạn khái niệm, cơ mà cái này thông cảm, thằng crystal-lang phải viết hẳn một page dài giải thích cái này: https://crystal-lang.org/reference/guides/concurrency.html cơ mà cái quan trọng nhất là các bạn đíu phân biệt được là mỗi một hệ thống, một ngôn ngữ hoặc thậm chí là một thư viện thì nó sẽ có implemation khác nhau về thread (native thread vs green thread... m:n thread vs 1:1 thread...), có thằng lại dùng coroutine, fiber, actor model các kiểu, thành ra khi giải thích một chuyện thì phải nói rõ ra là mình đang dùng ngôn ngữ nào (nếu thư viện đặc biệt thì cũng cần nói luôn cả thư viện), chứ cứ giải thích mù mờ, cái hiểu cái không thì chỉ tổ làm người khác hiểu sai :/ Click to expand...
Em đang học C# với cả python thím ơi. Càng xem càng rối vụ này D

dreamnight

Junior Member
Nipin said: đọc thread thấy nản vkl, trước giờ chỉ thấy parallel vs concurrent, sync vs async thôi lần đầu mới thấy đi so parallel với async. tiếp đó thì loạn khái niệm, cơ mà cái này thông cảm, thằng crystal-lang phải viết hẳn một page dài giải thích cái này: https://crystal-lang.org/reference/guides/concurrency.html cơ mà cái quan trọng nhất là các bạn đíu phân biệt được là mỗi một hệ thống, một ngôn ngữ hoặc thậm chí là một thư viện thì nó sẽ có implemation khác nhau về thread (native thread vs green thread... m:n thread vs 1:1 thread...), có thằng lại dùng coroutine, fiber, actor model các kiểu, thành ra khi giải thích một chuyện thì phải nói rõ ra là mình đang dùng ngôn ngữ nào (nếu thư viện đặc biệt thì cũng cần nói luôn cả thư viện), chứ cứ giải thích mù mờ, cái hiểu cái không thì chỉ tổ làm người khác hiểu sai :/ Click to expand...
Mình thì lại chẳng thấy nó liên quan gì câu chuyện ngôn ngữ ở đây cả. Vì đơn giản đây là đang đi về basic theory hơn, ai ai cũng phải biết. Đồng ý với bạn một phần là nhiều ngôn ngữ viết ra nhiều định nghĩa riêng và mỗi người có thể hiểu theo ngôn ngữ của họ. Ngoài ra có thể bạn cũng đang hiểu nhầm phần post của mình, mình nói đến "Lập trình đa luồng" hay "Multiple-thread programming", và khi nói đến vấn đề này thì sẽ có 2 dạng programming là Parallel và Async, cả 2 đều là lập trình xử lý đa luồng (hoặc theo ý bạn parallel ko phải multiple-thread programming?), nếu mình sai thì xin bạn chỉ rõ dùm còn theo Microsoft docs là ở đây: https://docs.microsoft.com/en-us/dotnet/standard/async -> Lập trình bất đồng bộ https://docs.microsoft.com/en-us/dotnet/standard/parallel-programming/ -> Lập trình song song Page của bạn có thể là nguồn tin cậy tuy nhiên để định nghĩa về Multiple-thread programming thì mình vẫn prefer Microsoft Docs hoặc Google Docs (nếu có mình ko thuộc trường phái Java). Đồng ý mình làm việc với Microsoft nhiều năm nên cũng ko dám nói page của bạn sai hoặc kiến thức bạn đưa ra sai. Chỉ có điều 2 cái này là basic theory của computer science mà ai học ĐH đều có biết qua (cái này mình chỉ nhớ là có vì đã nhiều năm rồi). D

dreamnight

Junior Member
karu88 said: Em đang học C# với cả python thím ơi. Càng xem càng rối vụ này Click to expand...
C# thì theo 2 pages của mình đính kèm ở trên nhé, nếu tin vào M$ thì đọc ko thì bạn có thể search qua các trang uy tín của Python namhoangnguyen8

namhoangnguyen8

Senior Member
Async, await thì chủ yếu là làm code bất đồng bộ của bạn dễ đọc hơn, khi đọc thì có thể đọc code giống như đồng bộ. Bác chọn cái nào cũng đc, miễn là bác đọc dễ hiểu là được. Mình thì thấy thích async với await hơn. Nipin

Nipin

Member
dreamnight said: Mình thì lại chẳng thấy nó liên quan gì câu chuyện ngôn ngữ ở đây cả. Vì đơn giản đây là đang đi về basic theory hơn, ai ai cũng phải biết. Đồng ý với bạn một phần là nhiều ngôn ngữ viết ra nhiều định nghĩa riêng và mỗi người có thể hiểu theo ngôn ngữ của họ. Ngoài ra có thể bạn cũng đang hiểu nhầm phần post của mình, mình nói đến "Lập trình đa luồng" hay "Multiple-thread programming", và khi nói đến vấn đề này thì sẽ có 2 dạng programming là Parallel và Async, cả 2 đều là lập trình xử lý đa luồng (hoặc theo ý bạn parallel ko phải multiple-thread programming?), nếu mình sai thì xin bạn chỉ rõ dùm còn theo Microsoft docs là ở đây: https://docs.microsoft.com/en-us/dotnet/standard/async -> Lập trình bất đồng bộ https://docs.microsoft.com/en-us/dotnet/standard/parallel-programming/ -> Lập trình song song Page của bạn có thể là nguồn tin cậy tuy nhiên để định nghĩa về Multiple-thread programming thì mình vẫn prefer Microsoft Docs hoặc Google Docs (nếu có mình ko thuộc trường phái Java). Đồng ý mình làm việc với Microsoft nhiều năm nên cũng ko dám nói page của bạn sai hoặc kiến thức bạn đưa ra sai. Chỉ có điều 2 cái này là basic theory của computer science mà ai học ĐH đều có biết qua (cái này mình chỉ nhớ là có vì đã nhiều năm rồi). Click to expand...
tôi đéo bảo là m$ sai, tôi chỉ bảo là bạn đọc hiểu như l`n. bạn thử tìm cho tôi cái topic nào nói async và parallel là hai khái niệm tương đương chỉ 2 dạng khác nhau về MT xem nào?
  • 1
  • 2
  • 3
Next 1 of 3

Go to page

Go Next Last You must log in or register to reply here.

Similar threads

loctran145 thắc mắc Làm web bán hàng pos tích hợp hóa đơn thuế
  • loctran145
  • Dec 16, 2025
  • Lập trình / CNTT
Replies 3 Views 348 Sunday at 10:31 PM hmmmmmmmmmmm hmmmmmmmmmmm The Gunners 2003-2004 thắc mắc Tivi Hisense vs TCL
  • The Gunners 2003-2004
  • Dec 17, 2025
  • Đồ điện tử & Thiết bị gia dụng
Replies 1 Views 156 Dec 17, 2025 lon_ton_sai_vat lon_ton_sai_vat Zeb@12 thắc mắc Phân tích mạng với wireshark
  • Zeb@12
  • Nov 26, 2025
  • Lập trình / CNTT
Replies 4 Views 320 Nov 26, 2025 Zeb@12 Zeb@12 quangpro1201 thắc mắc Xin tư vấn làm website
  • quangpro1201
  • Dec 16, 2025
  • Lập trình / CNTT
2 Replies 22 Views 952 Sunday at 10:38 PM hmmmmmmmmmmm hmmmmmmmmmmm youandme15994 khoe [Chia sẻ] Cách tải epub từ trang truyenfull miễn phí
  • youandme15994
  • Saturday at 10:11 AM
  • Phim / Nhạc / Sách
Replies 5 Views 287 Today at 1:33 PM minhquanpro M Share: Facebook X (Twitter) LinkedIn Reddit Pinterest WhatsApp Share Link

Thread statistics

Created karu88, May 13, 2020 Last reply from xindungbantoi2, Jun 10, 2020 Replies 58 Views 15,433

Share this page

Facebook X (Twitter) LinkedIn Reddit Pinterest WhatsApp Share Link
  • Forums
  • Học tập & Sự nghiệp
  • Lập trình / CNTT
Back Top

Từ khóa » đa Luồng Và Bất đồng Bộ