o0alvin0o
Senior Member
Em là dân trái ngành hiện đang làm Java Backend đuợc hơn nửa năm. Truớc khi học Java thì em có học C truớc (tự học), hiện tại đang có hứng thú với Rust chủ yếu viết những tool CLI linh tinh để phục vụ công việc chính. Cách đây không lâu thì có task liên quan tới async, thread, và cả OS. Khi tự tìm hiểu thì em thấy khó khăn vì không có foundation từ truờng lớp bài bản. Đây là một trò chơi hay nhưng cực kỳ risk nếu không hiểu rõ mình làm gì nên để hòan thành task em đã chọn phuơng án an toàn, đánh đổi performance và efficiency. Em nhờ các bác đi truớc giới thiệu cho em đầu sách để em tự nghiền ngẫm ạ. Em thích textbook hơn là xem nhưng nếu course chất luợng ở dạng video thì cũng không vấn đề gì.
Hiện tại em đang hiểu như sau:
Hiện tại em đang hiểu như sau:
- Concurrency không nhất thiết phải dựa trên multithread vì chẳng hạn như call http request thì mình delegate task cho Socket IO, trong khi chờ response thì sẽ thực hiện những block code khác không depend vào result của socket task, tuơng tự với những device khác như Disk IO... và phần lớn việc implement đuợc compiler đảm nhiệm, dev chỉ cần declare what to do in asynchronous(C# chẳng hạn).
- Parallel là những task thực sự đuợc execute cùng lúc và mỗi task có 1 thread riêng. Đến đây thì em lại có một thắc mắc khác là thread trong programming language mình sử dụng (với Java là JVM sẽ đảm nhiệm việc quản lý thread) có vẻ như không liên quan tới thread của OS, và thậm chí ở tầng hardware(cpu core, cpu thread) lại đuợc che đi sự phức tạp bằng 1 lớp abstraction nữa. Em cần lời khuyên là em nên tìm hiểu tới đâu, em sử dụng Java chủ yếu viết service phục vụ Enterprise là chính chả bao giờ đụng đến những cái này, Rust thì không biết tuơng lai sẽ như thế nào về nhu cầu việc làm.
- Nếu 2 khái niệm trên em hiểu đúng, thì liệu synchronus có thể hiểu đơn giản là code run line by line, còn async thì code có thể run không theo thứ tự mình viết, lúc này lại dẫn đến một khái niệm khác cũng tuơng tự như thế là Reactive và Event driven-programming.