Tôi đang làm việc trên một trò chơi android, và tôi bắt đầu nhận thấy một chút chậm chạp trong quá trình phát triển vì vậy tôi muốn cố gắng sử dụng đa luồng cho vui và học tập.Interpreting Multicore Performance Trace (Eclipse/Android)
Ứng dụng của tôi có 3 chủ đề:
- thread UI (nên chủ yếu là nhàn rỗi)
- game logic Chủ đề
- Graphics Chủ đề
tôi giảm thiểu phần quan trọng giữa các chủ đề 2 và 3 là tốt nhất tôi có thể, với ý tưởng rằng logic trò chơi có thể cập nhật độc lập với chuỗi hiển thị, và sau đó ở cuối của cả hai chủ đề tôi có thể có một cửa sổ ngắn nhất có thể, nơi tôi đẩy tất cả đồ họa cập nhật từ chuỗi logic đến vòng lặp trò chơi. Điều này sẽ cho phép hai luồng hoạt động độc lập trong phần lớn thời gian. Về lý thuyết, âm thanh như một chiến thắng hiệu suất.
Tuy nhiên, khi tôi bắt đầu triển khai, hiệu suất của tôi đã tăng mạnh. Nó tồi tệ hơn nhiều so với trước đây, một vòng lặp của việc cập nhật và kết xuất được lấy như 50 ms (20fps), do đó, nó trông giống như rác. Điều này chỉ là vẽ một số 20 hình tam giác và có thể là 20 điểm ảnh kết cấu, một khối lượng công việc thực sự đơn giản (tôi sợ nghĩ về những gì nó sẽ được khi tôi thực hiện đồ họa thích hợp).
Dù sao tôi đã theo dõi DDMS trong android để cấu hình mọi thứ đang diễn ra sai hoặc có thể được cải thiện.
http://i.stack.imgur.com/DDUYE.png
Đây là một cái nhìn của khoảng 3 khung hình của trò chơi của tôi. Cho đến nay nó có vẻ là làm những gì tôi mong đợi. Các phần được đánh dấu bằng màu xanh dương là phần bị khóa, trông giống như bên phải (giữ glThread chủ yếu chờ trong khi nó bị khóa). Tuy nhiên một khi tôi mở khóa nó, tôi sẽ thấy cả hai chủ đề làm việc cùng một lúc, và có vẻ như họ đang có, nhưng nếu tôi nhìn kỹ hơn:
http://i.stack.imgur.com/vukXQ.png
tôi đang làm phát triển của tôi trên một chiếc điện thoại lõi kép, nhưng nếu tôi hiểu dấu vết đúng, nó không giống như nó từng làm bất cứ điều gì song song, và những gì tồi tệ hơn nó dường như được chuyển đổi các chủ đề hoạt động hàng trăm lần mỗi mili giây! (trừ khi tôi giải thích điều này không chính xác). Tất cả sự chuyển đổi ngữ cảnh này dường như sẽ rất tệ cho hiệu suất, vì vậy tôi không chắc tại sao nó lại muốn chuyển đổi qua lại quá nhanh.
Vì vậy, sau khi giải thích hơi dài, tôi đang tự hỏi một vài điều:
- là hiểu biết của tôi đúng, rằng hình chữ nhật đầy trong các dấu vết là những chủ đề hoạt động, và các đường màu là chủ đề đang ngủ? Nếu không thì chúng có ý nghĩa gì?
- Tại sao tôi không bao giờ thấy chuỗi của mình chạy đồng thời trên điện thoại lõi kép được cho là?
- Tại sao chuyển đổi chuỗi hoạt động nhanh như vậy?
- Trong DDMS, tôi nhận được cảnh báo "CẢNH BÁO: trình gỡ lỗi đang hoạt động; kết quả dò tìm phương pháp sẽ bị lệch". Đây có phải là điều đáng lo lắng không? Làm thế nào tôi có thể loại bỏ cảnh báo này?(Tôi launced ứng dụng thông qua Run, không thông qua gỡ lỗi nếu nó làm cho một sự khác biệt)
Bạn đã sử dụng phiên bản Android nào cho hồ sơ của mình? Tôi đã nhận thấy hành vi khác nhau trên các phiên bản khác nhau. – rmtheis
... và bạn có đang sử dụng AsyncTask để tạo chủ đề không? – rmtheis
@rmtheis - Android 2.3 và không có chúng không phải là asynctask. Thread là một chuỗi GLSurfaceView, và cái khác là một 'Thread' mới bắt đầu với' Thread.start() '. – Tim