Go

Các mẫu Concurrency

Worker pool, pipeline, fan-out/fan-in, hủy, context, errgroup, semaphore

24 câu hỏi phỏng vấn·
Mid-Level
1

Worker pool trong Go là gì?

Câu trả lời

Worker pool là một mẫu concurrency sử dụng một số lượng goroutine (worker) cố định để xử lý các task từ một channel dùng chung. Mẫu này cho phép giới hạn số lượng goroutine đang hoạt động và kiểm soát mức tiêu thụ tài nguyên hệ thống. Khác với việc tạo một goroutine cho mỗi task, worker pool tái sử dụng một tập hợp worker để xử lý hiệu quả khối lượng task lớn.

2

Lợi ích chính của việc dùng worker pool thay vì tạo một goroutine cho mỗi task là gì?

Câu trả lời

Giới hạn số lượng goroutine đang hoạt động cho phép kiểm soát mức tiêu thụ tài nguyên hệ thống (bộ nhớ và CPU) và tránh quá tải. Tạo một goroutine cho mỗi task có thể dẫn đến hàng nghìn hoặc hàng triệu goroutine đồng thời, làm bão hòa scheduler và cạn kiệt bộ nhớ. Worker pool duy trì số lượng worker tối ưu xử lý task tuần tự, đảm bảo hiệu năng có thể dự đoán được ngay cả khi tải cao.

3

Pipeline trong bối cảnh concurrency của Go là gì?

Câu trả lời

Pipeline là một chuỗi các giai đoạn (stage) được kết nối bằng channel, trong đó mỗi giai đoạn là một nhóm goroutine thực thi cùng một hàm. Mỗi giai đoạn nhận dữ liệu qua channel đầu vào, thực hiện xử lý, rồi gửi kết quả qua channel đầu ra. Mẫu này cho phép phân rã quá trình xử lý phức tạp thành các giai đoạn đơn giản và có thể tái sử dụng, giúp dễ dàng kết hợp và kiểm thử từng thành phần một cách độc lập.

4

Làm thế nào để đóng channel đúng cách trong worker pool nhằm báo hiệu kết thúc xử lý?

5

Sự khác biệt giữa fan-out và fan-in là gì?

+21 câu hỏi phỏng vấn

Nắm vững Go cho lần phỏng vấn tiếp theo

Truy cập tất cả câu hỏi, flashcards, bài kiểm tra kỹ thuật, bài tập code review và mô phỏng phỏng vấn.

Bắt đầu miễn phí