Inflearn brand logo image
Inflearn brand logo image
Inflearn brand logo image
Programming

/

Back-end

Lớp học thành thạo Kotlin Coroutine thực chiến gần với chuẩn mực và trung thành với cơ bản

Khóa học này là một lớp master class, nơi bạn sẽ học một cách bài bản về 🌺 Coroutine của Kotlin, từ nền tảng lý thuyết đến ứng dụng thực tế. Khóa học sẽ đi sâu vào các tính năng chính thường dùng trong thực tế một cách tuần tự, bao gồm nguyên lý và cấu trúc cốt lõi của Coroutine, sự cần thiết của lập trình bất đồng bộ, Coroutine builders và scope, xử lý ngoại lệ, Channel, Flow, v.v. Mỗi khái niệm được giải thích kèm theo ví dụ thực hành, giúp cả người mới bắt đầu cũng có thể dễ dàng hiểu và áp dụng ngay vào thực tế. Đây là khóa học nhập môn và thực hành tốt nhất dành cho các lập trình viên muốn xây dựng kỹ năng Coroutine vững vàng trong thực tế.

(4.9) 10 đánh giá

59 học viên

  • jhong
코틀린
코루틴
Android
Kotlin
concurrent
backend
coroutine

Đánh giá từ những học viên đầu tiên

Dịch cái này sang tiếng Việt

  • Những cú pháp cơ bản nhất của Kotlin

  • Ưu nhược điểm của multi-thread và cách dùng coroutine

  • Đồng thời có cấu trúc trong Coroutine và Mẫu thực tiễn

  • Từ xử lý ngoại lệ cơ bản đến các phương pháp xử lý ngoại lệ nâng cao trong coroutines

  • Quản lý tài nguyên dùng chung trong lập trình song song

  • Phương pháp stream dữ liệu sự kiện sử dụng Flow

  • Channel 활용하여 경량 쓰레드 간 공유 자원 관리

Coroutines được giới thiệu bởi các nhà phát triển của các công ty lớn dựa trên các tác phẩm kinh điển

Không còn cần đến những bài giảng chỉ dạy bạn cách hoạt động của coroutine nữa. Trong bài giảng này, bạn sẽ được trải nghiệm nhiều trường hợp mà các nhà phát triển thực tế tại các công ty lớn đã gặp phải và áp dụng trong thực tế, cũng như mã thực tế có thể áp dụng ngay vào thực tế.


Bài giảng này trình bày các khái niệm cơ bản về coroutine, cũng như các công cụ thực sự được sử dụng nhiều, chẳng hạn như Flow, Channel, Dispatcher và Scope, kèm theo các ví dụ. Bạn có thể học một cách tự nhiên thông qua các ví dụ triển khai thực tế các hàm, từ các lệnh gọi API đơn giản đến logic bất đồng bộ phức tạp, mối quan hệ cha-con, quản lý công việc và thậm chí là xử lý ngoại lệ.


Trong khi nhiều tài liệu vẫn còn mang tính lý thuyết, bài giảng này hướng đến mục đích cung cấp thông tin chính xác cho bạn về "lý do tại sao nên viết theo cách này" , "vấn đề phát sinh ở đâu""cách giải quyết chúng" trong môi trường phát triển thực tế.

Chúng tôi sẽ không chỉ kết thúc bằng lý thuyết mà còn dạy bạn các công nghệ có thể áp dụng vào các dịch vụ thực tế, các mô hình và bí quyết thực sự được các học viên sử dụng, cũng như các phương pháp viết giúp tránh lỗi.

Tại sao tôi nên học coroutine?

Việc học coroutine chỉ vì chúng là “xử lý không đồng bộ” hoặc vì chúng là “xu hướng” là vô nghĩa.

Lý do thực tế tại sao bạn cần biết về coroutine là "hiệu quả thực tế" và "khả năng cạnh tranh".


Khi làm việc, có nhiều tác vụ mất nhiều thời gian, chẳng hạn như lệnh gọi API, giao dịch DB và kết nối hệ thống bên ngoài.

Nếu chúng ta cố gắng xử lý tất cả những điều này bằng luồng, tài nguyên sẽ bị hạn chế và nếu chúng ta cấu hình chúng bằng lệnh gọi lại, sẽ rất khó để quản lý.

Coroutine được sử dụng theo nhiều cách khác nhau, không chỉ giới hạn ở Android và backend. RxJava, callback hell, các vấn đề đồng bộ hóa phức tạp... Những ai đã từng trải nghiệm sẽ cảm thấy tận mắt, "Đây chính là lý do tại sao cần có coroutine."

📚 Logic bất đồng bộ phức tạp có thể được thực hiện đơn giản như mã đồng bộ

Trước đây, để xử lý nhiều tác vụ không đồng bộ, bạn phải sử dụng nhiều kỹ thuật khác nhau như lệnh gọi lại, luồng và Future. Tuy nhiên, cách tiếp cận này làm phức tạp mã và bằng cách cho phép kết hợp các hoạt động đồng bộ và bất đồng bộ chỉ với một từ khóa 'suspend' , khả năng đọc và bảo trì được cải thiện đáng kể.

📚 Tối đa hóa hiệu quả tài nguyên máy chủ

Nếu bạn tạo nhiều luồng để xử lý đồng thời, tài nguyên máy chủ có thể nhanh chóng cạn kiệt và hiệu suất có thể giảm sút. Coroutine có thể xử lý hàng nghìn hoặc hàng chục nghìn tác vụ với số lượng luồng nhỏ, cho phép sử dụng hiệu quả tài nguyên máy chủ. Ví dụ, khi xử lý số lượng lớn yêu cầu mạng hoặc dữ liệu đầu vào/đầu ra đồng thời, nó có thể xử lý nhiều yêu cầu hơn so với dựa trên luồng.

📚 Quản lý an toàn với tính đồng thời có cấu trúc

Coroutine quản lý vòng đời của các tác vụ theo mối quan hệ cha-con. Khi coroutine cha kết thúc, coroutine con sẽ tự động được dọn dẹp, ngăn ngừa rò rỉ tài nguyên hoặc hành vi không mong muốn. Tính đồng thời có cấu trúc này cho phép hành vi có thể dự đoán được và máy chủ hoạt động ổn định ngay cả trong các dịch vụ quy mô lớn.

📚 Xử lý lỗi trực quan và hủy bỏ

Khi xảy ra ngoại lệ trong mã không đồng bộ, thường khó biết được lỗi đó ở đâu và cách xử lý. Coroutine cung cấp hỗ trợ nhất quán cho việc truyền bá ngoại lệ, xử lý lỗi và hủy tác vụ (mã thông báo hủy, v.v.). Nó cho phép bạn xử lý các tình huống lỗi thường gặp trong thực tế một cách đơn giản và an toàn hơn nhiều.

📚 Luồng dữ liệu thời gian thực và xử lý sự kiện

Bằng cách sử dụng Flow và Channel của coroutine, Xử lý các sự kiện phức tạp như luồng dữ liệu thời gian thực, trò chuyện, dữ liệu cảm biến và thông báo thời gian thực Có thể triển khai bằng mã ngắn gọn và dễ đọc. Thay vì đính kèm lệnh gọi lại mỗi khi sự kiện xảy ra, Flow cho phép bạn làm việc với dữ liệu theo cách khai báo và phản ứng.

Sau khi học bài giảng, bạn có thể tạo ra kết quả như thế này.

Mã xử lý không đồng bộ có thể áp dụng trực tiếp vào thực hành

Nó cho phép bạn viết các luồng bất đồng bộ hẹp một cách ngắn gọn như mã đồng bộ.

Tạo mã dựa trên coroutine đáng tin cậy và hiệu quả có thể được sử dụng ngay trong các dịch vụ thực tế, mà không cần lệnh gọi lại hay quản lý luồng phức tạp!

Thiết kế Kiến trúc Đồng thời Có cấu trúc

Bạn có thể kết hợp mô hình đồng thời có cấu trúc vào dự án của mình, mô hình này quản lý an toàn nhiều tác vụ không đồng bộ trong mối quan hệ cha-con, thay vì chỉ một tác vụ duy nhất.

Thông qua đó, bạn sẽ học cách xử lý khối lượng lớn lưu lượng truy cập hoặc luồng dữ liệu phức tạp một cách đáng tin cậy.

Hệ thống xử lý sự kiện và luồng dữ liệu thời gian thực

Tận dụng các công cụ độc đáo của Coroutine, chẳng hạn như Flow và Channel, để triển khai các tính năng thiết yếu có trong nhiều hệ thống dựa trên sự kiện khác nhau, chẳng hạn như trò chuyện, đường ống dữ liệu và trình phân tích nhật ký!

Xử lý ngoại lệ và hủy bỏ ổn định

Hãy cùng tìm hiểu cách xử lý an toàn các lỗi phổ biến, lan truyền ngoại lệ và các vấn đề hủy tác vụ mà chúng ta thường gặp trong thực tế bằng cách viết mã thực tế sử dụng coroutine!

Mã dễ bảo trì, dễ đọc

Chúng tôi cung cấp một phong cách mã rõ ràng và nhất quán giúp bạn dễ dàng hiểu được ngay cả logic đồng thời/bất đồng bộ phức tạp chỉ bằng cái nhìn thoáng qua. Với điều này, bạn có thể phát triển các kỹ năng cần thiết cho công việc thực tế, chẳng hạn như cộng tác với các thành viên trong nhóm, xem xét mã và mở rộng tính năng!

Học bằng cách sử dụng khoảng 30 mã ví dụ thực tế

Khóa học này không phải là bài giảng chỉ bao gồm lý thuyết hay từ ngữ mà được biên soạn theo dạng khóa học mà bạn sẽ học bằng cách thực hiện các chức năng đơn giản hoặc nâng cao.

Bốn giá trị mà người chia sẻ kiến ​​thức coi trọng

1. Bài giảng phải mang tính nhân văn.

Tôi không nghĩ một bài giảng dễ trình bày là một bài giảng, ngay cả khi nó có thể bị coi là thiếu chuyên nghiệp. Thời gian gỡ lỗi cũng là một phần của bài giảng.

2. Phải chuyên dụng cho công việc thực tế.

Phát triển không phải là điều bạn có thể nói suông. Bạn có thể cùng nhau trải qua quá trình triển khai và vận hành thực tế.

  • Các nhà quy hoạch ơi... hãy cứu tôi...


3. Nó phải có ích cho học sinh.

Tôi muốn kết hợp những khái niệm mà tôi đã áp dụng và thấy hiệu quả vào thực tế của mình. Thông qua quá trình này, bạn có thể gián tiếp trải nghiệm công việc thực tế hoặc nếu bạn là người thực hành, bạn có thể chứng minh hiệu suất tốt hơn trong môi trường làm việc thực tế.

4. Bài giảng chưa kết thúc.

Tôi hy vọng các bạn sẽ để lại nhiều câu hỏi và câu trả lời trong suốt bài giảng. Bài giảng này không được tạo ra dựa trên kiến ​​thức của riêng tôi. Ý kiến ​​từ các nhà phát triển tại nhiều công ty lớn cũng đã được thu thập.

  • Sau đây là một số tiểu sử tóm tắt của những người đã giúp hoàn thành bài giảng này:

private val supported_one = "Nhà phát triển nền tảng thanh toán Kakao" private val supported_two = "Nhà phát triển máy chủ API Toss Securities" private val supported_three = "Nhà phát triển khởi nghiệp kỳ lân yêu cầu giữ bí mật"

Cấu trúc bài giảng

📚 Phần 1

Cùng với phần giới thiệu bài giảng, tôi muốn so sánh và giải thích sự khác biệt giữa các luồng nhẹ mà bạn có thể dễ dàng sử dụng, chẳng hạn như coroutine, và các luồng được hệ điều hành quản lý và phân bổ tài nguyên.

in ( "⚠️ Những điểm quan trọng mà các nhà phát triển nền tảng Kakao Pay nghĩ đến!! ⚠️" ) Bạn có thể phát triển mà không cần biết sự khác biệt giữa luồng và luồng nhẹ. Tuy nhiên, nếu bạn đang chuẩn bị thay đổi nghề nghiệp hoặc tìm kiếm việc làm, đây là chủ đề tuyệt vời để chuẩn bị cho buổi phỏng vấn! Đây là nội dung đơn giản, nhưng bạn có thể học nội dung đơn giản đó ngay trong thời gian này!

📚 Phần 2

Bạn sẽ thấy một cách rất cơ bản để khai báo một coroutine và xem mã hoạt động. Chúng tôi cung cấp phần này như một phần khởi động cho bạn với một số nội dung rất cơ bản.

📚 Mục 3

Bạn sẽ học cách quản lý vòng đời của một coroutine. Hãy cùng quản lý các sự kiện liên quan đến việc hủy coroutine bằng cách tìm hiểu về nhiều ví dụ thực tế về việc hủy coroutine và Gracefully Shut Down!

📚 Mục 4

Khi sử dụng lập trình đồng thời, bạn triển khai các dạng mã rõ ràng để trả về và sử dụng các giá trị. Ngoài ra, chúng tôi đã chuẩn bị thời gian để bạn hiểu và tìm hiểu cấu trúc coroutine cơ bản được gọi là mối quan hệ cha-con!

📚 Mục 5

Đã đến lúc hiểu về mặt lý thuyết về Dispatcher và Context được sử dụng bên trong coroutine và tìm hiểu bằng cách áp dụng nhiều Dispatcher khác nhau. Không bắt buộc!! Tôi đã chuẩn bị thời gian này mà bạn nhất định phải biết để tối ưu hóa.

📚 Mục 6

Mối quan hệ cha-con trong coroutine có luôn nhất quán không? Chúng tôi đã chuẩn bị nhiều chủ đề khác nhau, từ quản lý vòng đời thông qua các mô hình thực tế cho đến cách phá vỡ tính nhất quán của mối quan hệ cha-con trong coroutine.

📚 Mục 7

Bạn sẽ bắt đầu tìm hiểu về Flow. Trong phần này, thay vì chỉ trình bày phần lý thuyết, hãy học bằng cách thực sự tạo mã, chức năng hoặc dịch vụ có thể sử dụng trong thực tế. Trong bài giảng này, chúng tôi sẽ trình bày về luồng không đồng bộ thông qua các ví dụ thực tế lớn nhất.

in ( "⚠️ Những điểm quan trọng mà các nhà phát triển khởi nghiệp Unicorn nghĩ đến!! ⚠️" ) Tôi nghĩ đây là chủ đề cần thiết khi làm việc trên luồng dữ liệu lớn cho DB hoặc xử lý dữ liệu nhật ký chung. Mặc dù có một số phần của mã ví dụ đột nhiên trở nên khó hiểu, chúng tôi đã chuẩn bị chúng để bạn có thể xử lý chúng theo cách thú vị hơn. Nếu bạn nghiền ngẫm kỹ, hiểu và nghiên cứu nó, nó sẽ giúp ích rất nhiều!

📚 Mục 8

Chúng ta giao tiếp giữa các coroutine như thế nào? Trong lập trình đồng thời, khi bạn cần truyền dữ liệu giữa các hệ thống hoạt động song song, hoặc khi bạn cần truyền và xử lý thêm dữ liệu dựa trên sự kiện, hoặc khi bạn cần tạo tài nguyên chia sẻ dữ liệu giữa các luồng nhẹ!! Bạn sẽ tìm hiểu về các Kênh có thể xử lý những trường hợp khác nhau này.

in ( "⚠️ Những điểm quan trọng từ một nhà phát triển máy chủ, người quay phim bài giảng và phát triển nền tảng tại Pangyo ⚠️" ) Thực hành đảm bảo truyền dữ liệu an toàn nguyên tử giữa các luồng nhẹ được sử dụng rất rộng rãi. Tôi hy vọng rằng đây sẽ là cơ hội để đi sâu hơn vào coroutine bằng cách triển khai các kênh trong Kotlin theo cùng cách như trong Golang và quản lý các tài nguyên dữ liệu được chia sẻ trong lập trình song song.

📚 Mục 9

Xử lý ngoại lệ trong Kotlin quan trọng như thế nào? Đây là vật dụng cần phải có để ngăn ngừa tình trạng OOM do rò rỉ tài nguyên. Trong phần này, chúng ta sẽ đi sâu hơn một chút vào cách xử lý ngoại lệ và chuẩn bị cho bạn cách xây dựng một hệ thống mạnh mẽ hơn!

📚 Mục 10

Một phần quan trọng của lập trình đồng thời là kiểm soát các tài nguyên được chia sẻ. Nếu bạn bỏ qua phần này, rất dễ xảy ra những tình huống thực sự nguy hiểm như Tình trạng đua và Bế tắc. Trong bài học này, bạn sẽ học các kỹ thuật tiêu biểu để giải quyết những vấn đề này.

in ( "⚠️ Những điểm quan trọng mà các nhà phát triển Toss nghĩ đến ⚠️" ) Khi triển khai chức năng cho tài khoản ngân hàng và dịch vụ rút tiền, việc kiểm soát quyền truy cập vào các tài nguyên dùng chung này trở thành một chủ đề rất quan trọng. Trong bài giảng này, cá nhân tôi nghĩ rằng đây là chủ đề quan trọng nhất và ngay cả khi nó không phải là một coroutine, chủ đề này vẫn phải được giới thiệu, xem xét và sử dụng trong lập trình nói chung. Vì đây là phần cuối nên tôi nghĩ đây là một chủ đề rất quan trọng, nên tôi hy vọng các bạn sẽ tập trung và học tốt.

Lớp học nâng cao về Kotlin thông qua Thực hành dự án Time Capsule

  • Đây là bài giảng nâng cao về Kotlin hướng dẫn xây dựng các dịch vụ web bằng Ktor, mã nguồn mở lớn nhất của JetBrains. Trong bài giảng này, bạn sẽ tìm hiểu ngữ pháp cơ bản của Kotlin và các phương pháp mã hóa thực tế.

Lớp học nâng cao về Kotlin: Học thông qua thực hành dự án Bank Server

  • Bạn có thể tìm hiểu mọi thứ về phương pháp xử lý dữ liệu, các cân nhắc về DB và cách sử dụng dữ liệu dựa trên sự kiện theo loại lưu lượng, sử dụng các chiến lược duy trì đa ngôn ngữ và Kafka, v.v.

Những điều cần lưu ý trước khi tham gia lớp học

Môi trường thực hành

  • Chụp bằng MacOS M3.


  • java --version : 17.0.12 2024-07-16 LTS

  • Tôi sử dụng IDE từ nhóm JetBrains.

  • Xây dựng bằng Gradle.

  • Không bao gồm cơ sở hạ tầng.

Khuyến nghị cho
những người này

Khóa học này dành cho ai?

  • Người muốn học kỹ khái niệm Coroutine

  • Người muốn học Coroutine qua ví dụ thực tế

  • Những người muốn thiết kế và gỡ lỗi các cấu trúc coroutine phức tạp.

  • Những người quan tâm đến tối ưu hóa hiệu suất và xử lý song song

  • Nhà phát triển Backend và Mobile (Kotlin)

  • Lập trình viên backend/mobile muốn tích hợp Kotlin với Spring

Xin chào
Đây là

2,391

Học viên

169

Đánh giá

73

Trả lời

4.5

Xếp hạng

13

Các khóa học

자기 소개

집에서 빈둥대다 개발에 흥미를 느껴 개발 공부를 시작하였고 현재는 판교에서 플랫폼 서버 개발을 담당하여 진행하고 있습니다.

 

제가 공부를 했던 방법과 실무에서 접하실 수 있는 여러가지 문제점들과 해결책을 여러분들에게 제공하고 싶어 지식공유자 활동을 이어나가고 있습니다.

 

강의는 오로지 저만의 지식을 통해 만들어지지 않습니다. 모든 강의는 함께하시는 분들이 계십니다.

 

지식공유자 경력

[前] 샌드박스 블록체인 개발자

[前] 넥슨 자회사 백엔드 개발자

[] 판교에서 고여가는 서버 개발자

 

인터뷰 이력

Chương trình giảng dạy

Tất cả

37 bài giảng ∙ (5giờ 9phút)

Tài liệu khóa học:

Tài liệu bài giảng
Ngày đăng: 
Cập nhật lần cuối: 

Đánh giá

Tất cả

10 đánh giá

4.9

10 đánh giá

  • 미래 1인 개발자님의 프로필 이미지
    미래 1인 개발자

    Đánh giá 5

    Đánh giá trung bình 5.0

    5

    32% đã tham gia

    강의에 함께 참여하여 촬영하는데에 도움을 준 토스에서 개발하고 있는 개발자 입니다. 이 강의를 준비하면서 꽤나 많은 부분을 고민하였습니다. 아무래도 경량 쓰레드라는 주제가 쉽지 않은 주제이기도 했고, 어떤 식으로 다루어야 하는지도 고민을 하였습니다. 하지만 강의 촬영해주시는 분의 의견에 따라서 최대한 다양한 예제를 제공해드리며, 짜임새 있는 강의보다는 친숙한 강의가 되자는 목표를 가지고 진행하였습니다. 그만큼 단점도 있는 방식이지만 장점도 있는 방식이라고 생각을 합니다. 이 강의가 여러분들에게 완벽하게 코루틴을 사용하는 사람을 만들어드리지는 못합니다. 어디까지나 강의이기 때문입니다. 이 강의를 기준으로 다양하게 실제로 활용해보시면 완벽하게 코루틴을 사용하는 사람이 되실 수 있지 않을까 싶습니다. 이 강의가 여러분들을 만족시키지 못한다면, 부족한 만큼 많이 배우고 개선하고자 하는 의지가 있으니 피드백 해주시면 감사하겠습니다.

    • Hoos님의 프로필 이미지
      Hoos

      Đánh giá 9

      Đánh giá trung bình 5.0

      5

      97% đã tham gia

      Kotlin도 알고 싶고 Coroutine도 알고 싶다?? 그냥 이걸 참고해가면서 공부하면 가장 좋은 학습 방법이 아닐까 싶습니다. 감사합니다.

      • Hong
        Giảng viên

        안녕하세요 Hoos님 좋은 평 남겨주셔서 감사합니다!! 앞으로 더 좋은 강의로 찾아 뵙도록 할게요!! 좋은 하루 보내세요!!

    • 개발 잘하고 싶다...님의 프로필 이미지
      개발 잘하고 싶다...

      Đánh giá 7

      Đánh giá trung bình 5.0

      5

      95% đã tham gia

      다양한 주제로 재미있게 잘 봤습니다. 많은 도움이 되었네요. 감사합니다.

      • Hong
        Giảng viên

        안녕하세요 개발 잘하고 싶다님 좋은 평 남겨주셔서 감사합니다!! 앞으로 더 좋은 강의로 찾아 뵙도록 할게요!! 좋은 하루 보내세요!!

    • 최병현님의 프로필 이미지
      최병현

      Đánh giá 4

      Đánh giá trung bình 5.0

      5

      62% đã tham gia

      • Hong
        Giảng viên

        안녕하세요 최병현님 평 남겨주셔서 감사합니다. 앞으로 더 좋은 강의로 찾아뵙도록 하겠습니다! 좋은 하루 보내세요!

    • devHand님의 프로필 이미지
      devHand

      Đánh giá 9

      Đánh giá trung bình 5.0

      5

      32% đã tham gia

      재미있게 잘 듣고 있습니다. 초반이지만 꽤나 유익한 강의네요.

      • Hong
        Giảng viên

        안녕하세요 devHand님 평 남겨주셔서 감사합니다! 앞으로 더 좋은 강의로 찾아뵙도록 할게요!

    1.462.595 ₫

    Khóa học khác của jhong

    Hãy khám phá các khóa học khác của giảng viên!

    Khóa học tương tự

    Khám phá các khóa học khác trong cùng lĩnh vực!