Ví dụ: trên Mac Mini của tôi với Bootcamp, Team Fortress 2 chạy ở tốc độ khoảng 20fps trong OSX và 80fps trong Windows. Đây dường như là một trường hợp phổ biến. Tại sao lại thế này?
Ví dụ: trên Mac Mini của tôi với Bootcamp, Team Fortress 2 chạy ở tốc độ khoảng 20fps trong OSX và 80fps trong Windows. Đây dường như là một trường hợp phổ biến. Tại sao lại thế này?
Câu trả lời:
Trình điều khiển Direct3D trên Windows được tối ưu hóa một cách lố bịch, đôi khi cho các trò chơi cụ thể và được phát triển bởi các nhà cung cấp phần cứng riêng lẻ.
Các trình điều khiển OpenGL của Apple được Apple viết và bảo trì (AFAIK) và được dành cho sử dụng HĐH "chung", kết hợp UI và không có gì. Không có quá nhiều tối ưu hóa cho chơi game và thông lượng hiệu suất cao.
Về cơ bản, rất nhiều tài nguyên từ nhiều nguồn đã đi vào làm cho DirectX nhanh trên Windows, trong khi có ít tài nguyên hơn có sẵn để làm điều tương tự trên Mac.
Mặc dù tôi sẽ không giảm giá tối ưu hóa mà Microsoft có thể đã đưa vào Windows và / hoặc DirectX, tôi tin tưởng mạnh mẽ rằng hầu hết các chương trình hoạt động tốt hơn trên Windows chỉ vì đó là những gì các nhà phát triển tập trung vào (đó là tiền). Họ đưa ra quyết định thiết kế với Windows, và sau đó cố gắng làm cho nó hoạt động trong các HĐH khác (Mac, Linux, v.v.). Tôi liên tục gặp phải vấn đề này tại nơi làm việc: các dự án khác gặp quá nhiều rắc rối với việc chuyển sang các hệ thống không phải Windows vì các nhà phát triển coi nó như một suy nghĩ sau. Tôi đã nhiều lần viết các chương trình xây dựng trên nhiều HĐH với rất ít nỗ lực vì tôi đã lên kế hoạch ngay từ đầu. Một khi bạn đã thực sự cố gắng để làm điều đó (trái ngược với việc miễn cưỡng thực hiện cổng sau thực tế), bạn tìm hiểu những gì nó cần và nó đòi hỏi rất ít nỗ lực.
Là một người dùng Mac đồng nghiệp, tôi muốn cung cấp một yếu tố bổ sung: bộ lập lịch CPU trong OS X "công bằng" hơn trong Windows.
Đây là một chủ đề khoa học máy tính phức tạp, vì vậy đây là một cách đơn giản để nghĩ về bộ lập lịch CPU của bạn: bộ xử lý của bạn phải xử lý nhiều tác vụ cùng một lúc (tất cả các chương trình mở của bạn, cộng với các quy trình hệ thống nền). Nó chỉ thực sự có thể thực hiện một vài việc cùng một lúc (ví dụ số lõi nhân với số luồng trên mỗi lõi; i7 lõi kép có thể thực hiện 4 nhiệm vụ cùng một lúc). Vì vậy, nó chia tất cả các công việc thành từng mảnh, và xen kẽ giữa chúng để có vẻ như nó thực sự đang làm rất nhiều việc cùng một lúc. Khi bạn chạy hai chương trình, bộ xử lý thực sự chỉ xen kẽ qua lại giữa việc xử lý hai chương trình đó, rất nhanh (như, một vài micro giây ở đây, và sau đó là vài micro giây).
Mẫu mà mọi thứ được thực hiện theo thứ tự và trong bao lâu được quyết định bởi một "thuật toán lập lịch". Ví dụ, bộ lập lịch luân chuyển vòng chỉ sắp xếp các nhiệm vụ trong một vòng tròn và xử lý từng thứ tự theo thứ tự. Một người lập lịch khác có thể sắp xếp các nhiệm vụ từ ít nhất đến hầu hết thời gian còn lại - các nhiệm vụ nhỏ sẽ được thực hiện nhanh chóng và các nhiệm vụ lớn có thể phải chờ một lúc trước khi hoàn thành.
Windows và OS X rất khác nhau và thuật toán lập lịch của chúng cũng có một chút khác biệt. Windows hơi "thông minh" hơn về việc ưu tiên mọi thứ, vì vậy nó ưu tiên thêm cho các chương trình hiển thị để làm cho máy tính xuất hiện nhanh hơn. OS X, tuy nhiên, công bằng hơn với các quy trình nền. Các thuật toán tổng thể rất giống nhau giữa hai hệ điều hành (chúng đều là hàng đợi phản hồi đa cấp ), nhưng chi tiết nhỏ này dẫn đến trải nghiệm người dùng khác nhau.
Cả hai bên đều có lợi thế của họ. Giống như tôi đã nói, các chương trình hiển thị trong Windows sẽ xuất hiện nhanh hơn vì chúng được ưu tiên hơn; nhưng nếu một chương trình có thể nhìn thấy quyết định mất nhiều năng lượng, toàn bộ máy tính sẽ chịu đựng thêm một chút. Bộ lập lịch công bằng hơn của OS X dẫn đến tốc độ ổn định và dễ dự đoán hơn, rất tốt cho các hoạt động âm thanh và video. Ví dụ: nếu bạn đang phát một bài hát ở chế độ nền, nó sẽ ít bị nói lắp hơn khi bạn làm những việc khác cùng lúc so với trong Windows.
Vì vậy, điểm đáng chú ý là đây: một trò chơi toàn màn hình trong Windows sẽ được ưu tiên cao trên CPU và mọi thứ chạy trong nền sẽ chỉ phải chờ. Trong OS X, đây là trường hợp ít hơn.
Một số thông tin kỹ thuật về lịch trình được đưa ra ở đây ; phần còn lại của câu trả lời này là từ giáo dục khoa học máy tính của tôi và việc sử dụng OS X của tôi trong hơn 10 tháng qua, sau khi sử dụng Windows trong hơn 10 năm (và thỉnh thoảng là Linux). Đôi khi tôi cảm thấy thất vọng bởi người lập lịch công bằng hơn, nhưng những lần khác tôi đánh giá cao những lợi thế của nó.
Linux, nhân tiện, có một triển khai lập lịch trình thậm chí công bằng hơn; đây là những gì làm cho nó trở thành một máy chủ tuyệt vời, nhưng theo tôi thì trải nghiệm người dùng bị suy giảm. Ví dụ: khi máy tính của bạn bị sa lầy với các tác vụ, con trỏ của bạn sẽ ngừng phản hồi trơn tru vì nó được ưu tiên giống như mọi thứ khác. Điều này về cơ bản không bao giờ xảy ra trong Windows hoặc OS X.
Một số trò chơi đã được "chuyển" sang MacOSX thực sự là các trò chơi Windows chạy trong trình giả lập. Mặc dù tôi không có một danh sách đầy đủ các ví dụ, có vẻ như có ít nhất SPORE giống như vậy:
SPORE chưa bao giờ được phát hành chính thức trên GNU / Linux và phiên bản Mac kém. Cổng Mac thực sự là bản phát hành Windows được đóng gói với Cider, đây là một công nghệ không dùng nữa bao gồm phiên bản WINE (nay đã cũ) xung quanh các trò chơi. ( Nguồn )
Chạy một phần mềm trong trình giả lập theo định nghĩa chậm hơn so với chạy phần mềm nguyên bản.