
Các mẫu Concurrency
Worker pool, pipeline, fan-out/fan-in, hủy, context, errgroup, semaphore
1Worker pool trong Go là gì?
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.
2Lợ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ì?
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.
3Pipeline trong bối cảnh concurrency của Go là gì?
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.
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ý?
Sự khác biệt giữa fan-out và fan-in là gì?
+21 câu hỏi phỏng vấn
Các chủ đề phỏng vấn Go khác
Kiến thức cơ bản về Go
Cấu trúc dữ liệu Go
Interface trong Go
Xử lý lỗi
Cơ bản về Goroutine
Channels
Go Modules
Máy chủ HTTP
HTTP Client
Mã hóa JSON
Database/SQL
Gói context
Testing
Primitive đồng bộ hóa
Framework web Go
Thiết kế API REST
gRPC
Reflection
Quản lý bộ nhớ
Tối ưu hóa hiệu năng
Generics
Go Design Patterns
Microservices
Bảo mật và Xác thực
Docker & Containerization
Kubernetes Basics
Go Nâng cao
Phát triển CLI
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í