Have main program set GOMAXPROCs, might be a terrible idea, but it runs way faster. FSyncs now happen in a separate go routine, should probably a proper dedicated goroutine for flushing that gets told to flush over a channel, to avoid overlapping flush calls. Rearranged some code for easier reading