As hardware developer’s push away from creating faster processors in lieu of multicore architectures game developers have to leverage multithreading technologies to capitalize on these new devices. With multicore mobile devices the need for a multithreaded web based game engine is a reality. This talk will discuss design of various multithreaded web engine architectures. Two specific threading implementations will be discussed. First technique shows how to create a static thread that is registered with the engine with the same techniques as other loaded resource. A second technique will focus on using a Thread Controller, which has the ability to create dynamic generic threads that can be passed functions during run time and process them in parallel. This also allows for coupling threaded commands together thereby creating critical sections and other common multithreading techniques utilized in C++ coding.
Focus will also be placed on design consideration and operation performance. An example will be show that demonstrates how the proper coding style and data structures can make or break your design. Also timing and performance standards will be given for various browsers so users can understand the overall overhead and operational considerations that need to be considered when using threads in a browser based environment.
Technology and capability limitations will also be discussed so developers can understand the differences between multithreading in C++ native applications and JavaScript browser-based application. This will also include some tricks on how to design an architecture that allows for some workarounds. Other JavaScript APIs such as WebGL, and WebSockets will also be discussed and demonstrated to help show the full realization of a web based game engine.
Coding samples and architectural layouts will be shown to the audience to help drive home the concepts being discussed during the lecture. A functional HTML5 JavaScript Multithreaded Web Engine will be demonstrated during the lectured to show the overall functionality and performance of the techniques described.
A summary write up of a sample engine architecture is attached in the supplemental documents that gives a brief description and architectural figures. These will be integrated into the lecture to help visualize some of the concepts being discussed.
4. Web Workers and Multithreading
§ Parallel Execution
§ Communicates
through Message
§ Executes in
Isolated Thread
● No Access To
● DOM, Window
● Document, Parent
● No Shared Memory
● But You Do Have…
● XHR / WebSockets
● Navigator,Location
● setTimeout/setInterval
● App Cache, importScript
5.
6. Time to Create First Worker
• Varies depending on Worker Size
• Can take a second to start
• Initialize at beginning with a startup routine
7.
8.
9.
10. Web Worker Variations
● Inline vs. External
● BlobBuilder
● Inline only supported by FF and Chrome
● No difference in performance
● Dynamic
● Method determined at run time from JSON
string
● Altered and changed by user at run time
20. WebGL Tid Bits
Tips Up and coming
● DebugContex
● WebGL Inspector
● requestAnimFrame
● BMP Support
● No IE Support with out
plugins and Hackery
● WebGL Running in
Web Worker
● Swapping Memory
Buffer rather than
copy
22. Web Sockets
● Full Duplex Communication
● No HTTP overhead
● Has Secure Transport Protocol
● Cross Origin Communication
● Very Simple Client Side API
● Socket.onmessage = function(){}
● Socket.onopen = function(){}
● Socket.open(), Socket.send(), Socket.close()
23. Nitty Gritty
● 2 Bytes Overhead Per Message
● XHR ~871 Bytes
● Constant Connection
● No need to re-establish connection (COMET)
● Connecting to Non Browser Applications
(via Proxy/Server)
● Byte Arrays
● Bit Shifting
25. WebSocket Server Side
● Standard HTTP Request/
Response model performs
poorly for high number of
users
● Server Needs
● Thread or Non
Blocking IO Design
● High concurrency at
Low Performance cost
● Existing Servers
● Node.js
● Jetty (Java)
● Ruby (Event
Machine)
● Python (Twisted)
26. ● Google V8 Engine
● JavaScript
● Event Driven
● Event Loop with Callbacks
● Non-Blocking
● Native C++ Bindings
● Fast!!
FEATURES
• WebSocket Server
• Socket.IO
• Kaazing Gateway
• TCP Server
• File Server
• MySQL, MongoDB,
NoSQL
Modules (NPM)
29. JaHOVA OS Server Module
● Connect to Multiple Applications on
same server
● Remote Stream Functions
● User Creation on the fly
● Support for Multiple Connection Types
● TCP
● WebSockets
● Socket.IO and Express node.js modules
30. JOSSM: Breakdown
● Multiple Sessions
● Multiple Session Types
● Defined in a single line!
● Streamed Sessions, Modules, and
Functions
● Easily add and connect users to
multiple sessions
handler.createSession("Omega", "", ["gunner", "pilot"]);
31. JOSSM: Session Breakdown
● Session Specific Properties
● On Events
● Open
● Close
● Message
● Error
● Multiple Modules
● Remote Module Requests
32. Engine Architecture
● Dynamic Nested/Shared Web Worker
● Thread Controller
● Shared Memory Pool
● Custom Event Management System
● Available Engines
● Akihabara (2D)
● Effect Game (2D)
● Isogenic Engine
● Johmoho
36. Engine Demonstration
● WebGL, WebSockets, Web Workers
● HTML5 Audio
● Thread Controller
● Networking and Physics
● Node.js
● JaHOVA OS Server Module
● WebSocket - SocketIO
● Developed in under a week
37.
38. Final Thoughts
● Initialize Threads at Startup
● Initialization Timing
● Serialize for dependencies and registration
● Careful with Debuggers and Web Workers
● See more at
● http://jahovaos.com : Descriptions and Blog
● http://demo.jahovaos.com : Code
● Expo Floor 2-4 on Wed @ DeVry Booth