The order of execution depends on the trigger events specified. Each trigger's body will be executed in full before moving to the next trigger.
If your two triggers are defined as this:
trigger doSomethingBefore on Object__c (before insert, before update) {
// code
}
trigger doSomethingAfter on Object__c (after insert, after update) {
// code
}
The order of operations will be that doSomethingBefore will fully execute, then doSomethingAfter will fully execute.
Each trigger will be executed only once, unless a workflow field update affects the object, in which case both triggers will be called twice, or if another trigger performs a recursive DML operation, in which case the triggers will execute in a stack.
If both triggers were instead defined as (before insert, before update, after insert, after update)
, then the triggers will run in indeterminate order (you cannot guarantee which will be called first), and each trigger would be called twice per DML (four times on a workflow field update).
However, in each case, all of the code in a single trigger body will be run, except for obvious situations such as branching statements, before any other trigger will execute. One trigger won't stop half-way through to let another trigger execute, unless you explicitly perform a DML operation that causes other triggers to fire (but, in your specific case, this wouldn't happen).