các cao thủ về network cho em hỏi có thể read và write data cùng lúc trên cùng 1 connection ko ạ ? em cảm ơn mọi người ?
Networking: có thể read và write cùng lúc trên cùng một connection không?
Cùng 1 lúc thì khá tương đối.
Nếu sai số tính bằng miliseconds (hay microseconds) mà người dùng không nhận ra thì cũng có thể coi là cùng 1 lúc, nếu vậy, câu trả lời là có.
Nếu tính theo processor time, ví dụ CPU có tần số là 3GHz với single-core thì cùng 1 lúc nghĩa là 1/(3*10^9) seconds thì Python không thể read/write cùng 1 lúc vì Python có chứa GIL. Vậy câu trả lời là không.
Còn khoảng ở giữa thì phụ thuộc vào pattern bạn sử dụng (ở đây là blocking vs non-blocking socket scheme).
có nhé, dựa vào cách người ta cảm nhận
cảm ơn bạn, giả sử mình dùng non-blocking i/o, thì khi mình task read đang execute, thì cũng có thể execute task write chứ nhỉ
Như mình đã nói, Python có GIL nên chỉ có duy nhất 1 thread (real-thread) chạy tại 1 thời điểm, vì thế chỉ có duy nhất 1 task hoạt động tại cùng 1 thời điểm.
1 thời điểm khác với trong 1 giây.
Kể cả khi bạn dùng non-blocking IO (sử dụng thư viện asyncio chẳng hạn) thì bạn vẫn cần phải chia việc nhận (.recv()
) và gửi (.send()
) thành 2 tasks riêng biệt, 2 tasks này cũng không thể cùng thực thi và phải chờ event loop cho phép.
mình vẫn chưa rõ lắm về cách bạn đang nói, hiện tại mình cũng đang học cách sử dụng thư viện asyncio, nếu ko phiền mình có thể pm riêng cho bạn để trao đổi được ko. Cảm ơn bạn !!!
M nghĩ bạn nên post vấn đề b chưa hiểu lên trên public forum để những bạn phía sau nếu có câu hỏi tương tự có thể hiểu.
M nhận private support nhưng có tính phí.
Trả lời ngắn:
Nếu chưa đi sâu vào cpu các thứ đồ thì câu trả lời là có.
Và cũng chỉ là async như chính tên gọi của nó
Từng có một bạn hỏi, không rõ có phải bạn này không, cũng có ý tương tự đó là bạn ấy muốn hỏi rằng khi đang download thì có thể đốt đĩa CD/DVD cái file đang download dở dang đó, download về tới đâu thì chép ra CD/DVD tới đó để tiết kiệm thời gian thay vì ngồi đợi download xong rồi mới tiến hành.
Trong thế giới thực, người ta e ngại rằng não người không đa nhiệm thì cả thế giới này sự đa nhiệm cũng chỉ là chạy qua làm này một chút, chạy lại làm kia một chút, rồi cứ vậy nhiều lần. Nhưng vì những thứ chạy qua chạy lại đó quá nhanh đến mức giác quan con người không thể nhận biết nên nghĩ rằng…đa nhiệm.
Phật Như Lai là người có thế quan sát tốt nhất về thế giới, trong một satna, Ngài quan sát được có 900 lần sanh diệt của chúng sinh, tương đương 1 giây có 18 vạn lần sinh diệt. Còn người thường chúng ta, trong một phút không thấy được gì
Cho nên, read - write cùng lúc kia không hiểu là bạn chủ topic muốn nói gì. Read là read cái gì, write là write cái gì và bạn ấy đang sử dụng giao thức gì, ở layer mấy trong mô hình mạng. Có những giao thức ta read - write dựa trên sự cài đặt của giao thức, đâu phải muốn phá vỡ nó là được, nó chưa xong gói tin thì phải đợi chứ, không lẽ nhận được 1 bit thì cũng xử lý?
em cảm ơn anh đã giải thích thêm ạ, cái này trước đó em cũng đã đọc được trong cuồn sách “You Don’t Know JS” thì phải. nhưng để thật sự hiểu rõ thì em vẫn chưa hiểu rõ bản chất của vấn đề này ạ
cho mình xin mức giá của bạn với. nếu hợp lý thì mình sẽ sử dụng dịch vụ. cảm ơn bạn