Cảm ơn bạn đã gửi yêu cầu! Một thành viên trong đội ngũ của chúng tôi sẽ liên hệ với bạn ngay lập tức.
Cảm ơn bạn đã gửi đặt chỗ! Một thành viên trong đội ngũ của chúng tôi sẽ liên hệ với bạn ngay lập tức.
Thời gian kéo dài 28 Giờ học
Đề cương khóa học
Thách thức và vấn đề đồng thời
- Hạn chế phần cứng của nền tảng - luồng phần cứng, pipeline, kết nối bộ nhớ cache
- Các khái niệm cơ bản về lập trình đa luồng (đúng đắn của chương trình đa luồng, sống sót, tắc nghẽn, khóa, đua, nguyên tử, mô hình đồng nhất, taksonomi Flynn)
- Các cơ chế có sẵn trong C++ để triển khai đa luồng và đa tiến trình
- Triển khai thư viện chuẩn - các yếu tố từ C++14 đến ngày nay (C++2a)
- Triển khai có sẵn trong Boost - sự khác biệt so với thư viện chuẩn
Quá trình và luồng
- Ứng dụng đa tiến trình so với đa luồng
- Hệ điều hành và luồng (tổng quan ngắn về các triển khai có sẵn)
- Cơ chế đồng bộ hóa giữa quá trình và luồng
- Triển khai cấu trúc đồng bộ hóa
- Tính đặc thù của việc triển khai đa luồng trong cách tiếp cận hướng đối tượng (vai trò của mẫu RAII)
Mô hình bộ nhớ trong ngôn ngữ C++
- Đối tượng và địa chỉ trong bộ nhớ
- Xếp lịch các thao tác và ép buộc chúng
- Các mối quan hệ: đồng bộ hóa, tiền đề, thứ tự của các thao tác nguyên tử, chuỗi giải phóng
- Các rào cản bộ nhớ
- Thao tác nguyên tử
Quản lý luồng trong tiêu chuẩn C++14 và mới hơn
- Lớp std::thread và việc khởi chạy luồng
- Xác định luồng
- Kết nối và ngắt kết nối luồng
- Luồng và các container chuẩn
- Xử lý ngoại lệ trong luồng C++14
Mutual Exclusion và các đoạn mã quan trọng
- Các quy tắc đơn giản về mutual exclusion
- Các khái niệm (loại) đối tượng khóa có sẵn
- Giới thiệu nhanh về xử lý thời gian trong C++14 (thư viện chrono)
- Lớp std::mutex, std::timed_mutex, std::shared_mutex và các lớp phái sinh
- Mẫu RAII trong việc xử lý khóa (std::lock_guard, std::unique_lock)
- Khóa phụ thuộc và hoãn (std::lock)
- Sở hữu và sở hữu chung của khóa và luồng
- Vấn đề người đọc-người viết
- Khởi tạo một lần
- Bộ nhớ cục bộ (riêng) của luồng (tiếng Anh: std::thread_local)
Khóa và đồng bộ hóa luồng
- Các thao tác trên semaphores
- Khóa đệ quy
- Khóa có định nghĩa mức độ khóa
- Các biến quyết định và hợp tác với khóa
- Triển khai các rào cản hoạt động và thụ động (tiếng Anh: Idle Waits, Busy Waits)
- Tiếp tục thực hiện luồng
- Giao tiếp giữa các luồng (mô hình Actor và CSP)
Công việc bất đồng bộ
- Sự kiện bất đồng bộ và cách xử lý chúng
- Tương lai (tiếng Anh: future)
- Lời hứa (promises) (tiếng Anh: promise)
- Công việc đã chuẩn bị (tiếng Anh: packaged_task)
Loại nguyên tử
- Các loại nguyên tử tiêu chuẩn
- Cờ nguyên tử universal (std::atomic_flag)
- Mẫu lớp "std::atomic<T>" và các specialization của nó
- Hàm công cụ (tự do) của std::atomic
Tính đặc thù trong thiết kế API đa luồng
- Thiết kế cấu trúc sử dụng khóa - khóa thô và khóa tinh
- Hiệu suất mã đồng thời - kỹ thuật ước tính và đo lường
- Cắt dữ liệu
- Tính khả dãn của giải pháp
- Xử lý lỗi và tình huống ngoại lệ trong kiến trúc ứng dụng
Kiểm thử và gỡ lỗi ứng dụng đa luồng
- Đánh giá mã về các thao tác đa luồng
- Tính đặc thù của việc kiểm thử ứng dụng đa luồng
- Kiểm thử đơn vị
- Tăng khả năng xảy ra tình huống khẩn cấp để phục vụ cho việc kiểm thử
- Các phương pháp chính thức để kiểm thử ứng dụng đa luồng
- Mẫu kiến trúc ứng dụng đa luồng và việc kiểm thử, gỡ lỗi (tổng quan)
Quản lý luồng nâng cao
- Luồng phụ thuộc (mẫu Sagi)
- Tránh cạnh tranh trong việc truy cập dữ liệu
- Dừng và ngắt luồng một cách kiểm soát
- Ngắt các cuộc gọi chặn
- Xử lý ngắt
- Gánh công việc
- Ngắt công việc khi kết thúc hoạt động của ứng dụng
Mẫu thiết kế đa luồng
- Các loại và mục đích sử dụng mẫu đa luồng
- Phạm vi áp dụng của các mẫu
- Pool luồng (tiếng Anh: Thread Pool)
- Mẫu đối tượng hoạt động (tiếng Anh: Active Object)
- Hàng đợi an toàn đa luồng (tiếng Anh: Thread Safe Queue)
- Mẫu nhà sản xuất và người tiêu dùng (tiếng Anh: Producer Consumer)
- Mẫu monitor (tiếng Anh: Monitor)
- An toàn đa luồng của các mẫu GoF
Yêu cầu
- Kỹ năng sử dụng công cụ xây dựng phần mềm bằng C++ trong môi trường GNU/Linux và/hoặc MS Windows
- Hiểu biết về lập trình C++ (cả lập trình hướng đối tượng và procedural) ở mức độ trung cấp và nâng cao
- Hiểu biết về việc tạo mã tổng quát (mẫu)
Đánh giá (1)
Ví dụ thực tế
Jan Kaniuka - SIEC BADAWCZA LUKASIEWICZ - PRZEMYSLOWY INSTYTUT AUTOMATYKI I POMIAROW PIAP
Khóa học - Programowanie wielowątkowe w języku C++
Dịch thuật bằng máy