nói dối e blog

Tối Ưu Hóa PBC

Tối ưu hóa pbc

Trong vài ngày gần đây, tôi đã thực hiện một số tối ưu hóa quan trọng cho thư viện pbc. Đây là một thay đổi lớn nên tôi quyết định viết blog để ghi lại quá trình này.

Điểm cải tiến đầu tiên là việc thiết kế một cơ chế cấp phát bộ nhớ heap riêng biệt cho đối tượng rmessage. Thay vì sử dụng hàm malloc của hệ thống khi giải nén dữ liệu, chúng tôi chuyển sang phân bổ bộ nhớ từ một vùng nhớ liên tục chuyên dụng. Điều này giúp quá trình xóa đối tượng rmessage trở nên nhanh chóng hơn đáng kể, vì chúng ta chỉ cần giải phóng toàn bộ vùng nhớ heap mà không cần quản lý chi tiết từng khối nhớ riêng lẻ. Tuy nhiên, cách tiếp cận này sẽ làm tăng lượng bộ nhớ sử dụng trong quá trình giải nén. Trong các trường hợp giới hạn bộ nhớ hoặc yêu cầu hiệu năng cao, tôi vẫn khuyến nghị sử dụng chế độ pattern - dù giao diện lập trình này phức tạp hơn nhưng lại kiểm soát chặt chẽ cả về mặt thời gian và không gian bộ nhớ.

Ví Dụ Về Vòng Đệm (Ringbuffer) Trong Mạng Máy Tính

Gần đây tôi có chia sẻ về ứng dụng của vòng đệm vòng (vòng đệm dạng vòng tròn) trong các hệ thống truyền thông mạng. Rất nhiều bạn đã gửi email cho tôi để thảo luận chi tiết về cách triển khai.

Vào kỳ nghỉ lễ Thanh Minh, rảnh rỗi ở nhà tôi quyết định thử cài đặt một phiên bản đơn giản. Dù quá trình viết có chút phức tạp, nhưng tôi vẫn kiểm soát được độ phức tạp của chương trình và hoàn thành cơ bản chức năng mong muốn.

无标题

Hỗ trợ Lua int64

Hỗ trợ Lua int64

Lua hỗ trợ kiểu dữ liệu int64 lâu nay vẫn là một chủ đề thú vị đáng được bàn luận. Dù tôi đã chia sẻ trên Twitter và gửi thư đến danh sách thảo luận Lua mailing list, tôi vẫn muốn viết một bài blog chi tiết hơn để ghi lại những suy nghĩ này.

Lua về cơ bản chỉ hỗ trợ duy nhất kiểu số học (number), vốn dĩ là kiểu double theo mặc định. Tuy nhiên bạn hoàn toàn có thể chỉnh sửa tập tin cấu hình luaconf.h để chuyển kiểu number sang int64. Tuy nhiên, đánh đổi việc từ bỏ khả năng xử lý số thực (floating point) chỉ để lấy int64 có lẽ không phải là lựa chọn tối ưu cho đa số người dùng.

Ghi Chú Phát Triển (12): Chiến Lược Đồng Bộ Vị Trí

Trong hai tuần trở lại đây, một vài đồng nghiệp mới đã bắt đầu vào việc hoặc sẽ sớm tham gia. Vì vậy tôi không muốn dành quá nhiều thời gian đi sâu vào các chi tiết kỹ thuật cụ thể nữa. Tốt nhất nên đợi đến khi kế hoạch nhân sự được hoàn tất, mọi người đều có việc để làm rồi hãy tự mình nhận riêng một phần việc cụ thể. Do đó, lượng mã nguồn do tôi trực tiếp viết trong giai đoạn này không nhiều. Chủ yếu tôi chỉ bảo trì lại những module đã xây dựng trước đây và tiến hành bàn giao các đoạn mã đã viết cho những bạn phụ trách cụ thể.

Ghi Chú Phát Triển (13): Thiết Kế Và Triển Khai Dịch Vụ AOI

Trong buổi họp sáng nay sau khi thống nhất kế hoạch công việc, tôi nhận ra đã đến lúc bắt tay vào triển khai mô-đun AOI.
Khái niệm AOI (Area of Interest) có hai ứng dụng chính trong hệ thống:

Ứng dụng thứ nhất: Giải quyết vấn đề kích hoạt AI của NPC. Trong bối cảnh game có hàng trăm NPC (gấp 10 lần số lượng nhân vật điều khiển bởi người chơi - PC), điều kiện kích hoạt trí tuệ nhân tạo thường dựa vào khoảng cách với các đối tượng khác. Nếu không có mô-đun AOI, mỗi NPC sẽ phải quét toàn bộ đối tượng trong cảnh để tính khoảng cách - thuật toán có độ phức tạp O(N*N). Chúng tôi sẽ xây dựng một mô-đun AOI độc lập để tối ưu hóa quá trình so sánh, đồng thời thông báo qua tin nhắn khi hai đối tượng tiếp cận trong phạm vi nhất định.

0%