Đây có lẻ là câu hỏi mà những ai đang và đã sở hữu một thiết bị android đều thắc mắc, khi mà thiết bị của mình lại có một cấu hình cao vượt trội hơn so với iOS hay Windows Phone nhưng về độ mượt hay hiệu suất lại thấp hơn rất nhiều. Bài hôm nay mình sẽ lý giải điều này.
Cách thức hoạt động của Hệ đièu hành Android
- Thứ 1: tại sao Android khởi động ứng dụng chậm và đôi khi xảy ra tình trạng khựng hay out ứng dụng bất thình lình:
Theo một số bạn thì việc Android chạy chậm và kém mượt là do ứng dụng của android được chạy trên một bộ máy ảo (vitual machine) Davik, thế nhưng sự thật thì vấn đề hiệu năng của android không phải do nó hoạt động dựa vào máy ảo Davik. Bản chất trong ứng dụng của android khi chạy là các mã nguồn bytecode được tạm thời biên dịch sang machine binary code trước khi được chạy. Nói nôm na cho dễ hỉu là ngôn ngư viết ứng dụng cho Android là Java, khi Java biên dịch, nó sẽ không biên dịch hẵn sang machine binary code dành cho máy như các ngôn ngữ khác như C, VB mà biên dịch sang một mã bytecode trung gian, rồi từ mã này Android lại biên dịch một lần nữa sang mã Machine code phù hợp vs thiết bị đang chạy. Ai sử dụng android đều nhận thấy một điều rằng, android luôn dành một số lượng ram nhất định (khoảng trên 200mb ram) dành cho bộ nhớ Davik Cache, cái mà ios hay bất kì một hệ điều hành nào khác không có (đièu này lý giải một phần tại sao android khó mà hoạt động trên các thiết bị cấu hình cấp thấp). Bộ nhớ này đóng vai trò là một bộ nhớ đệm lưu trữ những mã máy tạm thời được biên dịch. Và khi đã được biên dịch, nó chạy như các app thuần túy hoạt động trơn tru, có chăng là khi khởi động app sẽ lâu hơn do tốn thời gian nạp ứng dụng và biên dịch.
- Thứ 2: tại sao Android lại có hiệu suất thấp trong khi cấu hình rất cao và thời lượng pin kém:
Đầu tiên chúng ta cần phải nói đến việc sử dụng một smartphone nó không hề giống với việc bạn sử dụng trên PC hay laptop. Trên smartphone, bạn không cần phải có đa cửa sổ, tức là bật hết cửa sổ này đến cửa sổ khác, bạn chỉ quan tâm đến cái mà đang hiện diện trên màn hình. Cho nên chính vì điều đó mà apple đã đưa ra một kỹ thuật đa nhiệm gọi là Pseudo Multitasking.
Kỹ thuật này hoạt động khá là đơn giản, gọi là đa nhiệm nhưng thực chất của nó là đa nhiệm đơn tiến trình. Khi một app được khởi chạy, chỉ có duy nhất app là chạy thật sự, mọi tài nguyên CPU, Ram hay GPU đều được dồn cho app đó. Khi bạn ấn nút Home, hay chuyển sang app khác, app đó sẽ được tắt đi hoàn toàn. Nhưng trước khi nó được tắt đi hoàn toàn, ios sẽ ghi lại mọi trạng thái cũng như dữ liệu vào bộ nhớ rồi tắt hoàn toàn app đó, hệ thống không còn quản lý gì nữa, mọi thứ đều được clear, app đó sẽ không còn sử dụng đến CPU hay Ram gì nữa (trừ các app có liên quan đến nhạc, đồng bộ, định vị…). Khi chúng ta chạy lại ứng dụng, trước khi hiển thị, ios sẽ khôi phục lại toàn bộ trạng thái, dữ liệu của app như đúng khi chúng bị tắt. Mọi thứ trở lại nguyên vẹn, và ng dùng không hề biết rằng app đó vừa bị tắt.
Về phía Android, ứng dụng sẽ theo một mô hình phức tạp hơn gồm nhiều trạng thái hơn ios, nhưng có một điểm khác, đó là ứng dụng vẫn được “keep running” khi bạn thoát ra. Ngoài ra có một sự thật là ram dù được sử dụng hay không được sử dụng đều tốn một lượng điện năng ngang nhau, do đó Google muốn khai thác tốt nhất Ram có thể bằng cách tự nạp môt một phần ứng dụng vào trong Ram cho đến một mức độ giới hạn số Ram còn trống. Lý giải cho việc ứng dụng vẫn được khởi chạy trong hệ thống, đó là ứng dụng khi cần gọi lại sẽ được hiển thị luôn, mọi thứ sẽ được bày ra liền ngay và lập tức mà không cần phải tốn công xử lý lại dữ liệu, khi nào cần thì gọi thôi. Tuy nhiên chính vì kiểu đa nhiệm đa tiến trình đó mà nó kéo theo hàng loạt hệ lụy:
Đầu tiên mình xin nhắc lại 2 khái niệm cơ bản nhất của hệ điều hành:
- Memory paging hay còn gọi là phân trang,: đây là một tính năng của hệ điều hành nhằm quản lý bộ nhớ Ram. khi ta nạp 1 ứng dụng lên thì HĐH cần phải biết vị trí nào trong RAM còn trống, đủ kích thước nạp ứng dụng đó, và khi cần xử lý thì nó phải có một index chỉ đường đến vị trí nạp ứng dụng chứ nếu không làm sao mà biết đường lần trong hàng tỉ ô nhớ của hệ thống.
- System scheduling, gọi là "định thì" hệ thống, nó khá là quan trọng, bởi vì bản chất của CPU nó chỉ xử lý có một lệnh / 1 IPC thôi, trong khi có nhiều process cần được xử lý, vì vậy mới cần thằng "cảnh sát giao thông" này, nó là thằng quyết định xem process nào được vào gặp "sếp lớn", còn những thằng còn lại sẽ phải đứng chờ trong một "hàng đợi", còn đợi bao lâu thì tùy vào thuật toán định thì cụ thể. Ở cả Android lẫn iOS thì mặc định thuật toán định thì đều là dạng tuần tự theo lượt, vào trước ra trước FIFO. Tuy nhiên do tính mở Android có thể thay đổi được bằng các Kernel bên ngoài.
OK, bây giờ chắc bạn cũng hiểu ra phần nào, lý do tại sao android kém mượt và tốn pin hơn là do việc phân phối tài nguyên hệ thống.
- Với iOS, toàn bộ tài nguyên hệ thống sẽ được huy động một cách tối đa để phục vụ cho một ứng dụng đang hiện hành, việc quản lý số lượng process phải xử lý ít hơn, việc phân trang và định thì cũng đơn giản hơn Android nên nó có thể hoạt động trơn tru hơn mặc dù CPU và Ram yếu hơn, dẫn đến việc tiêu thụ điện thấp hơn.
- Với Android, việc sử dụng true multitasking đồng nghĩa vs việc phân chia tài nguyên cho nhiều ứng dụng hơn, phân trang, định thì phức tạp hơn, ngoài ra còn phải xử lý tranh chấp tài nguyên, ngăn ngừa deadlock...Tất cả những thứ đó làm gánh nặng cho android, lam nó kém hiệu suất hơn, tốn tài nguyên và tiêu thụ nhiều năng lượng.
Vì thế trên các thiết bị Android, để cải thiện tình trạng đó, nhà sản xuất khắc phục bằng cách cung cấp thêm tài nguyên hệ thống như tăng CPU, RAM, GPU, tăng dung lượng pin.
Có một sự thật là trong tất cả hệ điều hành cho di động như Android, iOS, Windows phone, Blackberry thì chỉ có duy nhất Android là hoạt động theo kiểu True Multitasking, còn các hệ điều hành khác đều theo mô hình tương tự Apple nhưng được chế biến, chỉnh sửa phù hợp cho triết lý của họ.
Bài viết có tham khảo một số thông tin từ:
Nhận xét
Đăng nhận xét