Chuyển đến nội dung chính

Tại sao Android lại hao pin và hiệu suất thấp hơn các hệ điều hành khác ?


Đâ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

Bài đăng phổ biến từ blog này

Sự thật về Kernel và Tuổi thọ pin

Khi nói về kernel của Android, một số lượng không nhỏ các chủ đề thảo luận là về tuổi thọ pin. Đã có nhiều quan điểm về mối quan hệ giữa kernel và tuổi thọ pin. Phần lớn cho rằng chính kernel là thủ phạm chính ảnh hưởng đến tuổi thọ pin. Số còn lại lại chắc chắn khẳng định sử dụng kernel thì tuổi thọ pin cũng chẳng có gì thay đổi. Sự thật lại nằm ở giữa. Trước khi chúng ta tìm hiểu sự thật của vấn đề, Tôi cần làm rõ một số điều sau: Thứ nhất, kernel không làm hao pin. Người dùng nhiều lần cài kernel sau đó phản ánh là kernel đã gây hao pin rất nhiều (và có thể có ảnh hưởng nào đó khiến dẫn tới quan điểm kernel là thứ vứt đi và các nhà phát triển đã bỏ công vô ích). Để minh chứng, họ chụp ảnh màn hình từ ứng dụng theo dõi pin thể hiện kernel là nguồn gây hao pin chủ yếu. Điều này rất sai lầm. Trên thiết bị Android, kernel chỉ cung cấp c...

Làm sao để cân chỉnh lại pin trên thiết bị HTC

Đây là cách chính thức được Đội ngũ kĩ thuật HTC khuyến cáo thực hiện. Cuối cùng thì chúng ta cũng đã có cách khác so với cách cũ "huyền thoại" liên quan đến cân chỉnh lại pin bằng cách xóa file batterystats.bin tại /data/system, vì nó chẳng có tác dụng gì đối với tuổi thọ pin cả. Nếu bạn đang gặp vấn đề với tuổi thọ pin, ví dụ pin hay tụt nhanh hoặc bất thường (pin báo 18% nhưng bất ngờ khoảng 5 giây sau máy tự tắt) các dưới đây có thể giúp bạn khắc phục tình trạng này do nó xóa hoàn toàn các thống kê, chỉ số về pin và giúp sạc lại bình thường. Ít nhất thì cũng theo Đội ngũ kĩ thuật HTC nói như vậy    Quy trình đơn giản như sau: Chắc chắn là tùy chọn Fastboot được vô hiệu hóa trong phần Settings\Power Tắt máy Cắm dây sạc sử dụng sạc chuẩn HTC và để sạc khoảng hai phút hoặc lâu hơn Khi đang sạc, giữ nguyên volume-up + volume-down + power . Điện thoại sẽ bật và tắt liên tục mỗi 15 giây trong khi vẫn giữ ba nút trên. Giữ nguyên khoản...

First in Vietnam: Hạ cấp HTC 10 S-ON Android 8.0 Oreo xuống Android 7.0 thành công

XTC2Clip vô dụng với base 3.x của Android 8.0, giờ mà xài 25$ để s-off rồi hạ thì khách không chịu ! Đành quay tay vậy   .... Kết quả 2h vắt não   Android info   Bootloader sau khi hạ được thì mình tiến hành s-off lun