30/09/2018, 17:41
Sự khác nhau giữa fork và thread?
Cho mình hỏi về sự khác nhau giữa fork và thread? Có tác dụng gì?
Mình chỉ biết thread là chia luồng song song với nhau. Còn fork thì chịu
Bài liên quan
theo mình hiểu thì fork dịch ra là cái nỉa, vậy có thể hình dung nó là phải có 1 cái luồng gốc và từ luồng đó sinh ra nhiều luồng khác làm những công việc khác rồi sau đó kết quả sẽ được trả về cho luồng gốc trở lại
fork
là câu lệnh trong Linux để tạo ra một copy process giống như process cha. @Rok_Hoang đọc quyển Head First C ở phần cuối quyển sách có một chương nói về cái này. Em làm một ví dụ trong sách đó sẽ hiểu. Có thời gian anh sẽ giải thích thêm.Ví dụ trong sách HFC cũng giống như ví dụ trong link wiki này
Nhưng đọc trước cách hoạt động của nó thì mới hiểu được.
Có phải giống QThreadPool trong Qt không anh Đat?
À không phải đâu Vũ
QThreadPool là một cải tiến để tiết kiệm thời gian tạo threads thôi.
Fork là một system call của Linux, khi một chương trình gọi Fork thì Hệ điều hành sẽ copy ra một chương trình nữa có process ID khác với chương trình hiện tại, và hai chương trình sẽ chạy song song.
Chương trình đầu gọi là Process Cha
Chương trình sau gọi là Process Con
Cả hai process này sẽ có tất cả mọi thông tin trên Stack giống nhau. Chỉ có hệ điều hành mới thấy sự khác biệt đó là PID của nó khác nhau mà thôi.
Như ở ví dụ trên, khi ta gọi lệnh
fork
thì lệnh này sẽ trả ra mộtpid
, tức process id`.Bên trong chương trình của mình, mình có thể kiếm tra giá trị
pid
này để biết được mình đang ở trong process cha hay trong process con.Nếu giá trị
pid
mà khác0
, tức là ta đang ở trong process chaNếu giá trị
pid
mà bằng0
, tức là ta đang ở trong process conNếu giá trị
pid
mà bằng-``, tức là ta
fork` thất bạiLưu ý, giá trị
pid
trong chương trình có thể in ra bằng0
, nhưng đó không phải là pid thực của process con, đó chỉ là giá trị để ta biết rằng, à, đây là process con.Ví dụ cụ thể, ta có một chương trình
helloworld
, trong chương trình này cófork
ra một chương trình khác nữa. Khi đó ta kiểm traprocess id
của các chương trình đang chạy trên máy Linux bằng lệnhTa có thể thấy có 2 chương trình
helloworld
đang chạy, một chương trình có thể có pid1234
, và một có pid1235
hoặc1237
.Cái
pid
1234
là củahelloworld
cha, còn cáipid
còn lại là củahelloworld
con.Em vừa làm thử ví dụ
Windows không có mặc định fork là vì lý do gì nhỉ? Tận dụng đa luồng à?
Windows không có
fork
vì cách quản lý process của Windows khác với Linux.