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
forklà 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
forkthì 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ị
pidnày để biết được mình đang ở trong process cha hay trong process con.Nếu giá trị
pidmà khác0, tức là ta đang ở trong process chaNếu giá trị
pidmà bằng0, tức là ta đang ở trong process conNếu giá trị
pidmà bằng-``, tức là tafork` thất bạiLưu ý, giá trị
pidtrong 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óforkra một chương trình khác nữa. Khi đó ta kiểm traprocess idcủ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ó pid1235hoặc1237.Cái
pid1234là củahelloworldcha, còn cáipidcòn lại là củahelloworldcon.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ó
forkvì cách quản lý process của Windows khác với Linux.