Go & Assembly. Windows with C++ - The Evolution of Threads and I/O in Windows. When starting a new project, do you ask yourself whether your program will be compute-bound or I/O-bound?
You should. I’ve found that in most cases it’s either one or the other. You might be working on an analytics library that’s handed a pile of data and keeps a bunch of processors busy while crunching it all down to a set of aggregates. Alternatively, your code might spend most of its time waiting for stuff to happen, for data to arrive over the network, a user to click on something or perform some complex six-fingered gesture.
In this case, the threads in your program aren’t doing very much. Threads, of course, provide no direct value whatsoever to the user. One Thread. Josh Haberman: Hello, JIT World: The Joy of Simple JITs. Fast IP Routing with LC-Tries. The Early History Of Smalltalk. Original pdf / make corrections Alan C.
Kay Apple Computer firstname.lastname@example.org.Internet# Permission to copy without fee all or part of this material is granted provided that the copies are not made or distributed for direct commercial advantage, the ACM copyright notice and the title of the publication and its date appear, and notice is given that copying is by permission of the Association for Computing Machinery. To copy otherwise, or to republish, requires a fee and/or specific permission. Understanding C by learning assembly. Last time, Alan showed how to use GDB as a tool to learn C.
Today I want to go one step further and use GDB to help us understand assembly as well. Abstraction layers are great tools for building things, but they can sometimes get in the way of learning. My goal in this post is to convince you that in order to rigorously understand C, we must also understand the assembly that our C compiler generates. I'll do this by showing you how to disassemble and read a simple program with GDB, and then we'll use GDB and our knowledge of assembly to understand how static local variables work in C. Note: All the code in this post was compiled on an x86_64 CPU running Mac OS X 10.8.1 using Clang 4.0 with optimizations disabled (-O0*) PE101 - corkami - Portable Executable 101 - a windows executable walkthrough - reverse engineering experiments and documentations. << index Android/Java/x86/... opcodes tables PDF tricks Portable Executable x86 oddities This graphic is a walkthrough of a simple Windows Portable Executable (download sources and binary here), that shows its dissected structure and explains how it's loaded by the operating system. order a print this analyzed PE file was entirely written by hand to be concise (standard PEs contain more informations that are not essential for such a first introduction).
You can download the poster, print it, distribute it, or even modify it (with attribution). How do debuggers keep track of the threads in your program? at time to bleed by Joe Damato. If you enjoy this article, subscribe (via RSS or e-mail) and follow me on twitter. tl;dr This post describes the relatively undocumented API for debuggers (or other low level programs) that can be used to enumerate the existing threads in a process and receive asynchronous notifications when threads are created or destroyed.
This API also provides asynchronous notifications of other interesting thread-related events and feels very similar to the interface exposed by libdl for notifying debuggers when libraries are loaded dynamically at run time. amd64 and gnu syntax As usual, everything below refers to amd64 unless otherwise noted. Software breakpoints It’s important to begin first by examining how software breakpoints work. A debugger sets a software breakpoint by using the ptrace system call to write a special instruction into a target process’ address space. Java Tuning in a Nutshell - Part 1. While delivering a training recently, I got a request to put together a JVM tuning cheat sheet.
Given the 50+ parameters available on the Sun hotspot, this request is understandable. The diagram below is what I came up with. I’ve tried to narrow down the most important flags that will solve 80% of JVM performance needs with 20% of the tuning effort. This article assumes basic JVM tuning knowledge - the different generations used in the Sun hotspot JVM, different garbage collection algorithms available, etc. Although this is intended primarily for enterprise grade Oracle Fusion Middleware products, it applies to most server JVM’s with large heaps and hosted on server class, multi-core machines. 15 Key Resources to Learn Django - Yipit Django Blog. Learning DjangoLearning Python and Django is easy if you have the right resources at your fingertips.
Coming from pretty much only having studied programming in school, I started working as a developer at Yipit with almost no web programming experience. In a little fewer than ten weeks, I’ve become comfortable navigating and making large changes to the whole Python/Django application code as well as contributing new features (interested in learning Django at Yipit? Join us!). Reading List on Big Data. This is purely theoretical blog post to summarize my last few days of studies into the big data (which were triggered by one homeless guy and sequence of highly unprobable events that actually took place).
No fancy intro, just assuming that dealing with big data processing is really cool or at least has an outstanding financial reward potential (given the trajectory taken by modern IT and economics). Current Approach at Lokad Or at least - simple part of it, that is not touched yet by secret fairy dust of our outstanding analytics team. In short, big data is bulky, complex, requires a lot of CPU and does not fit in RAM.
Welcome to the Parallel Jungle! The Great Disk Drive in the Sky: How Web giants store big—and we mean big—data. Consider the tech it takes to back the search box on Google's home page: behind the algorithms, the cached search terms, and the other features that spring to life as you type in a query sits a data store that essentially contains a full-text snapshot of most of the Web.
While you and thousands of other people are simultaneously submitting searches, that snapshot is constantly being updated with a firehose of changes. At the same time, the data is being processed by thousands of individual server processes, each doing everything from figuring out which contextual ads you will be served to determining in what order to cough up search results. That's not something that Google could pull off with an off-the-shelf storage architecture. And the same goes for other Web and cloud computing giants running hyper-scale data centers, such as Amazon and Facebook. The problem isn't simply an issue of disk read and write speeds. 64 and IA-32 Architectures Software Developer Manuals.
Understanding Memory. Our context for this discussion is the AICT Linux Cluster, which runs 64-bit GNU/Linux on AMD Opteron hardware. .
Programs and Processes A program's page table is one component of its execution context. Other components include its current working directory, list of open files, environment (list of environment variables), and so on. Together, they constitute what is known as a process or task.