Bài viết gốc bởi Adi Mizrahi, đăng trên CodeX, ngày 8 tháng 1 năm 2025.
Chào các tín đồ Swift! Nếu bạn giống tôi, bạn luôn tìm kiếm cách để làm cho mã của mình sạch hơn, an toàn hơn và — hãy thừa nhận đi — thú vị hơn một chút để khoe với mọi người. Vậy thì, với Swift 6.0, Apple đã giới thiệu một tính năng sẽ thay đổi cách chúng ta xử lý đồng thời: Actors.
Trước khi bạn nghĩ, "Ôi trời, lại một tính năng đồng thời mới để học...", tin tôi đi, cái này đáng để bạn chú ý. Hãy để tôi giải thích.
Actors là gì?
Actors là mô hình đồng thời mới của Swift đảm bảo dữ liệu của bạn luôn an toàn trong môi trường đa luồng. Hãy nghĩ về chúng như những người bảo vệ trạng thái có thể thay đổi. Chúng kiểm soát cách và khi nào mã tương tác với dữ liệu mà chúng quản lý, bảo vệ nó khỏi bị truy cập đồng thời bởi nhiều luồng.
Nói đơn giản, actors giống như nhân viên bảo vệ câu lạc bộ. Họ đảm bảo rằng chỉ một "người" (luồng) tương tác với "bữa tiệc" (dữ liệu chia sẻ) tại một thời điểm. Không hỗn loạn, không drama, chỉ có trật tự.

Swift 6.0 nâng cấp actors lên một tầm cao mới với một số cập nhật thú vị:
- Tích hợp Automatic Reference Counting (ARC) Actors hiện quản lý vòng đời đối tượng tốt hơn, giảm khả năng xảy ra các vòng lặp giữ và rò rỉ bộ nhớ. Bạn có thể tập trung hơn vào logic của mình và ít phải lo lắng về quản lý bộ nhớ.
- Chú thích Global Actor Với global actors, bạn có thể gán các hàng đợi cụ thể cho toàn bộ phần mã của mình. Hoàn hảo cho việc cập nhật giao diện người dùng hoặc các tác vụ nền.
- Cải thiện hiệu suất Nhờ các tối ưu hóa ẩn sau, actors nhanh hơn bao giờ hết. Bạn hầu như không nhận thấy sự giảm hiệu suất, ngay cả với khối lượng công việc nặng.
Tại sao nên sử dụng Actors?
Được rồi, hãy nói về lý do tại sao bạn nên quan tâm:
- An toàn luồng Không còn lo lắng về những tình trạng race conditions khó chịu. Actors đảm bảo rằng dữ liệu của bạn không bị truy cập đồng thời bởi nhiều luồng.
- Mã sạch hơn Với actors, bạn không cần phải rải rác các lệnh gọi
DispatchQueue
khắp nơi. Mã của bạn sẽ gọn gàng và dễ đọc hơn. - Ít gỡ lỗi hơn Vì actors xử lý đồng thời cho bạn, bạn sẽ dành ít thời gian hơn để theo dõi các lỗi kỳ lạ và có nhiều thời gian hơn để xây dựng các tính năng tuyệt vời.
Actors thay thế gì?
Actors thay thế những gì chúng ta thường sử dụng như locks, semaphores hoặc DispatchQueue
. Hãy nói lời tạm biệt với mã mẫu và chào đón cách xử lý đồng thời khai báo hơn. Đây là một so sánh:
Trước khi có Actors (Sử dụng Locks):
class Counter {
private var value = 0
private let lock = NSLock()
func increment() {
lock.lock()
value += 1
lock.unlock()
}
func getValue() -> Int {
lock.lock()
defer { lock.unlock() }
return value
}
}
Với Actors:
actor Counter {
private var value = 0
func increment() {
value += 1
}
func getValue() -> Int {
return value
}
}
Thấy sự khác biệt chứ? Với actors, bạn có thể bỏ qua các locks và tập trung vào logic của ứng dụng. Gọn gàng hơn, đúng không?

Actors vs Singletons: Một nâng cấp lớn
Đây là điều thú vị: actors làm cho singletons hầu như không cần thiết. Bạn biết mẫu singleton, đúng không? Đó là cách để đảm bảo chỉ có một instance của một lớp trong toàn bộ ứng dụng của bạn. Nhưng, singletons có tiếng là khó quản lý trong môi trường đa luồng. Chúng dễ bị race conditions và có thể dẫn đến mã lộn xộn.
Với actors, bạn nhận được cùng lợi ích một instance chia sẻ duy nhất quản lý trạng thái mà không gặp phải những rắc rối. Trạng thái cô lập của actor đảm bảo rằng chỉ một luồng truy cập các thuộc tính hoặc phương thức của nó tại một thời điểm, giải quyết các vấn đề đồng thời vốn có trong singletons.
actor UserSessionManager {
private var isLoggedIn = false
func logIn() {
isLoggedIn = true
}
func logOut() {
isLoggedIn = false
}
func checkStatus() -> Bool {
return isLoggedIn
}
}
// Sử dụng
let sessionManager = UserSessionManager()
await sessionManager.logIn()
print("Đã đăng nhập: \(await sessionManager.checkStatus())")
Với actors, bạn nhận được tất cả lợi ích của một singleton quản lý trạng thái tập trung nhưng theo cách an toàn và hiện đại hơn. Tạm biệt, singletons dễ vỡ. Xin chào, actors mạnh mẽ!
Actors hoạt động như thế nào?
Actors trong Swift 6.0 sử dụng mô hình cô lập actor, nghĩa là tất cả trạng thái có thể thay đổi bên trong actor được bảo vệ. Để truy cập nó, bạn phải sử dụng await
.
Đây là một ví dụ nhanh:
actor BankAccount {
private var balance: Double = 0.0
func deposit(amount: Double) {
balance += amount
}
func getBalance() -> Double {
return balance
}
}
// Sử dụng
let account = BankAccount()
await account.deposit(amount: 100)
let currentBalance = await account.getBalance()
print("Số dư: \(currentBalance)")
Mẹo chuyên nghiệp: Sử dụng Global Actors cho cập nhật giao diện người dùng
Cần cập nhật giao diện người dùng từ actor của bạn? Sử dụng chú thích @MainActor
:
@MainActor
actor UIUpdater {
func updateLabel(_ label: UILabel, with text: String) {
label.text = text
}
}
Điều này đảm bảo rằng các cập nhật giao diện người dùng của bạn diễn ra trên luồng chính mà không cần bất kỳ công việc bổ sung nào.
Khi nào nên sử dụng Actors
- Quản lý các tài nguyên chia sẻ như bộ đếm, tài khoản ngân hàng hoặc bộ nhớ đệm.
- Xử lý dữ liệu trong nền mà không cần lo về race conditions.
- Thay thế các singletons không an toàn bằng một giải pháp hiện đại hơn.
Tuy nhiên, actors không phải lúc nào cũng cần thiết. Nếu bạn không làm việc với dữ liệu chia sẻ hoặc nếu ứng dụng của bạn chủ yếu chạy trên một luồng duy nhất, thì việc sử dụng actors có thể làm tăng độ phức tạp không cần thiết.
Nhận xét cá nhân về bài viết
Bài viết này cung cấp một cái nhìn tổng quan rõ ràng về actors trong Swift 6.0, giúp lập trình viên hiểu cách hoạt động của chúng và cách chúng có thể cải thiện mã nguồn. Tác giả đã làm tốt khi giải thích sự khác biệt giữa cách tiếp cận cũ (sử dụng locks, DispatchQueue) và cách tiếp cận mới (dùng actors), giúp lập trình viên dễ dàng thấy lợi ích thực tế.
Một điểm mạnh nữa của bài viết là sử dụng các ví dụ mã đơn giản nhưng trực quan, giúp lập trình viên dễ dàng áp dụng ngay vào dự án thực tế. Ngoài ra, so sánh actors với singletons là một góc nhìn thú vị, vì nó chỉ ra cách actors có thể thay thế một mẫu thiết kế truyền thống mà vẫn giữ được hiệu quả.
Tuy nhiên, bài viết có thể cải thiện bằng cách đề cập rõ hơn đến một số nhược điểm tiềm ẩn của actors, chẳng hạn như hiệu suất khi sử dụng với số lượng lớn hoặc những tình huống mà chúng có thể không phù hợp. Việc so sánh hiệu suất giữa actors và các phương pháp truyền thống cũng sẽ giúp lập trình viên hiểu rõ hơn khi nào nên (hoặc không nên) sử dụng chúng.
Hướng phát triển trong tương lai
Với sự ra mắt của Swift 6.0, actors chắc chắn sẽ đóng vai trò quan trọng trong các ứng dụng iOS và macOS hiện đại. Dưới đây là một số xu hướng có thể thấy trong tương lai:
- Hỗ trợ tốt hơn cho Swift Concurrency
- Apple có thể tiếp tục tối ưu hóa hiệu suất của actors, giúp chúng hoạt động nhanh hơn và tiết kiệm bộ nhớ hơn.
- Các công cụ phát triển như Xcode có thể cung cấp các cảnh báo hoặc gợi ý tốt hơn khi sử dụng actors không hợp lý.
- Kết hợp với AI và Machine Learning
- Các tác vụ AI/ML thường đòi hỏi xử lý dữ liệu lớn và tính toán song song. Actors có thể giúp quản lý trạng thái của mô hình một cách an toàn và hiệu quả.
- Mở rộng cho các hệ thống phân tán
- Nếu Apple mở rộng Swift để hỗ trợ tốt hơn các hệ thống phân tán, actors có thể đóng vai trò quan trọng trong việc đồng bộ hóa dữ liệu giữa nhiều thiết bị hoặc dịch vụ.
- Tích hợp sâu hơn với SwiftUI
- SwiftUI đã tận dụng tốt @MainActor để đảm bảo cập nhật giao diện người dùng an toàn. Trong tương lai, chúng ta có thể thấy nhiều mẫu thiết kế mới sử dụng actors để tối ưu hiệu suất giao diện người dùng hơn nữa.
- Thay đổi cách chúng ta thiết kế kiến trúc ứng dụng
- Với actors, nhiều ứng dụng có thể chuyển từ mô hình MVC truyền thống sang một mô hình mới, nơi dữ liệu được quản lý hoàn toàn thông qua actors để đảm bảo tính an toàn luồng.

Kết luận
Actors trong Swift 6.0 là một bước tiến quan trọng giúp lập trình viên xử lý đồng thời một cách an toàn hơn. Chúng thay thế các phương pháp cũ như locks và DispatchQueue bằng một mô hình rõ ràng, dễ đọc và dễ bảo trì hơn. Mặc dù vẫn còn một số điểm cần cải thiện, nhưng với hướng phát triển hiện tại, actors có thể trở thành tiêu chuẩn mới trong lập trình Swift.
Nếu bạn là một lập trình viên iOS, bây giờ là thời điểm tuyệt vời để tìm hiểu về actors và thử áp dụng chúng vào dự án của mình. Swift đang ngày càng tiến gần hơn đến việc xử lý đồng thời một cách tự nhiên và dễ dàng, và actors là minh chứng rõ ràng nhất cho điều đó! 🚀